Mon goose агрегатная функция $ filter с датой сравнения lte и gte для объекта вложенного массива - PullRequest
0 голосов
/ 16 января 2020
  1. В понедельник у меня есть схема 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    
            }
        }]

Может кто-нибудь сказать правильное решение, почему это дает мне такой результат, когда данные доступны в наборе данных
...