Запрос работает на Robo Mongo, но в mongoose nodejs

Я пытаюсь выполнить следующий запрос в оболочке RoboMongo.

От РобоМонго

db.getCollection('works').aggregate([{
        "$match": {
            "$and": [{
                    "employee": ObjectId("5c932e67d7a3cc2530919f75")
                },
                {
                    "$or": [{
                            "$and": [{
                                    "start": {
                                        "$lte": ISODate("2019-01-01T18:29:59.999Z")
                                    }
                                },
                                {
                                    "end": {
                                        "$gte": ISODate("2019-01-01T18:29:59.999Z")
                                    }
                                }
                            ]
                        },

                        {
                            "$and": [{
                                    "end": {
                                        "$gte": ISODate("2019-01-14T18:30:00.000Z")
                                    }
                                },
                                {
                                    "start": {
                                        "$lte": ISODate("2019-01-14T18:30:00.000Z")
                                    }
                                }
                            ]
                        }
                    ]
                }
            ]
        }
    },
    {
        "$group": {
            "_id": null,
            "total": {
                "$sum": "$allocation"
            }
        }
    }
])

вывод:

{
    "_id" : null,
    "total" : 300
}

Тот же запрос, выполняемый на мангусте в nodejs

let empID = mongoose.Types.ObjectId(work.employee);
await workModel.aggregate([
            {
                $match: {
                    $and: [
                        { employee: empID },
                        {
                            $or: [
                                {
                                    $and: [
                                        { start: { $lte: moment(startDayEnd).toISOString() } },
                                        { end: { $gte: moment(startDayEnd).toISOString() } }
                                    ]
                                },
                                {
                                    $and: [
                                        { end: { $gte: moment(endDayEnd).toISOString() } },
                                        { start: { $lte: moment(endDayEnd).toISOString() } }
                                    ]
                                }
                            ]
                        }
                    ]
                }
            },
            {
                $group: {
                    _id: null,
                    total: { $sum: "$allocation" }
                }
            }
        ]);

С mongoose.set('debug', true);

[{
    '$match': {
        '$and': [{
            employee: 5c932e67d7a3cc2530919f75
        }, {
            '$or': [{
                '$and': [{
                    start: {
                        '$lte': '2019-01-01T18:29:59.999Z'
                    }
                }, {
                    end: {
                        '$gte': '2019-01-01T18:29:59.999Z'
                    }
                }]
            }, {
                '$and': [{
                    end: {
                        '$gte': '2019-01-14T18:30:00.000Z'
                    }
                }, {
                    start: {
                        '$lte': '2019-01-14T18:30:00.000Z'
                    }
                }]
            }]
        }]
    }
}, {
    '$group': {
        _id: null,
        total: {
            '$sum': '$allocation'
        }
    }
}], {}

Вывод

[]

Любая помощь?


person Thamaraiselvam    schedule 28.03.2019    source источник
comment
И с вашим определением схемы оно говорит что-то вроде mongoose.model('WorkModel', workModelSchema) ? Суть в том, что первый бит больше похож на "WorkModel' или вы на самом деле назвали его 'Work'.   -  person Neil Lunn    schedule 28.03.2019
comment
@NeilLunn Да, это так   -  person Thamaraiselvam    schedule 28.03.2019
comment
Нет проблем с workModel, он отлично работает с другими запросами. export const workModel = mongoose.model('Work', workSchema);   -  person Thamaraiselvam    schedule 28.03.2019
comment
Так что вы должны назвать его "Work", чтобы он фактически транслировался в коллекцию "works", и еще одна проблема, которую я только что заметил, заключается в том, что вы используете строку для ObjectId. Mongoose не может передать жало ObjectId в конвейере агрегации.   -  person Neil Lunn    schedule 28.03.2019
comment
Пробовал кастовать перед пайплайном даже это не помогает.   -  person Thamaraiselvam    schedule 28.03.2019
comment
Извините, я имел в виду даты. Они должны быть Date типами в JavaScript, а не строками. Неправильный обман, я поменяю его. .toDate() из моментов вместо .toString().   -  person Neil Lunn    schedule 28.03.2019
comment
Круто, @NeilLunn сработало new Date(startDayEnd)   -  person Thamaraiselvam    schedule 28.03.2019