Я пытаюсь выполнить следующий запрос в оболочке 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'
}
}
}], {}
Вывод
[]
Любая помощь?
mongoose.model('WorkModel', workModelSchema)
? Суть в том, что первый бит больше похож на"WorkModel'
или вы на самом деле назвали его'Work'
. - person Neil Lunn   schedule 28.03.2019workModel
, он отлично работает с другими запросами.export const workModel = mongoose.model('Work', workSchema);
- person Thamaraiselvam   schedule 28.03.2019"Work"
, чтобы он фактически транслировался в коллекцию"works"
, и еще одна проблема, которую я только что заметил, заключается в том, что вы используете строку для ObjectId. Mongoose не может передать жалоObjectId
в конвейере агрегации. - person Neil Lunn   schedule 28.03.2019Date
типами в JavaScript, а не строками. Неправильный обман, я поменяю его..toDate()
из моментов вместо.toString()
. - person Neil Lunn   schedule 28.03.2019new Date(startDayEnd)
- person Thamaraiselvam   schedule 28.03.2019