- В понедельник у меня есть схема go:
{
"_id" : ObjectId("5e1d9e1615035fe9867ab058"),
"farmid" : "8f9dbffa-5333-4533-b04c-182e0c147dd8",
"boxid" : "e60bf8df-c75d-11e6-b349-02adcd2575fd",
"s2" : {
"b2" : [
{ "date" : ISODate("2019-10-27T05:30:00.000+05:30"),
"value" : 1761
},
{
"date" : ISODate("2019-09-22T05:30:00.000+05:30"),
"value" : 6033
},
{
"date" : ISODate("2019-06-09T05:30:00.000+05:30"),
"value" : 1581
},
{
"date" : ISODate("2019-05-30T05:30:00.000+05:30"),
"value" : 1663
}
}
Это мой запрос функции кода агрегации с $ filter и $ gte, оператором $ lte.
let start = new Date("2019-07-01T05:30:00.000+05:30");
let end = new Date("2019-12-31T05:30:00.000+05:30");
{
{
$match: {
"s2.b2.date": { $gte: start, $lte: end }
}
},
{ $project: {
"farmid" : 1,
"boxid":1,
"s2.b2": {
$filter: {
input: "$b2",
as :"data",
cond: {
$and: [
{ $gte:["$$data.date",start] } ,
{ $lte: ["$$data.date",end ] }]
}
}
},
}},
}
Я пытаюсь отфильтровать данные, чтобы я мог вернуть данные, которые удовлетворяют условию запроса при выполнении этого кода, который я получил, как показано ниже. В этом выводе я получил нулевое значение в массиве b2.
[
{
"_id": "5e1d9e1415035fe9867600d7",
"farmid": "7beb32a4-8bf6-49eb-b827-37854a7d0604",
"boxid": "e60bf85c-c75d-11e6-b349-02adcd2575fd",
"s2": {
"b2": null
}
},
{
"_id": "5e1d9e1415035fe9867600d8",
"farmid": "dbd06299-12ee-42db-a6e6-9d4e796bc465",
"boxid": "e60bf85c-c75d-11e6-b349-02adcd2575fd",
"s2": {
"b2": null
}
},
{
"_id": "5e1d9e1415035fe9867600d9",
"farmid": "b7665ed3-cf10-451d-81b2-d14cec213250",
"boxid": "e60bf85c-c75d-11e6-b349-02adcd2575fd",
"s2": {
"b2": null
}
}]
Может кто-нибудь сказать правильное решение, почему это дает мне такой результат, когда данные доступны в наборе данных