嵌套数组对象上带有日期比较lte和gte的猫鼬聚合$ filter函数

时间:2020-01-16 14:39:16

标签: mongoose aggregate-functions date-comparison

  1. 我在Mongo中有一个架构,如下所示:


     {
     "_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  
                    }

      }

  1. 这是我使用$ 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 ] }]
                }
              }
            },

          }},

       }

  1. 我正在尝试过滤数据,以便在执行此代码时可以带回满足查询条件的数据,如下所示。在此输出中,我在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    
            }
        }]

  1. 有人可以告诉正确的解决方案,当数据集中的数据可用时,为什么会给我这样的结果

0 个答案:

没有答案