Mongoose聚合$filter函数,在嵌套数组对象上使用日期比较lte和gte 我在Mongo中有一个模式,如下所示: 这是我使用$filter和$gte、$lte operator的聚合代码函数查询 我正在尝试过滤数据,以便在执行下面的代码时返回满足

Mongoose聚合$filter函数,在嵌套数组对象上使用日期比较lte和gte 我在Mongo中有一个模式,如下所示: 这是我使用$filter和$gte、$lte operator的聚合代码函数查询 我正在尝试过滤数据,以便在执行下面的代码时返回满足,mongoose,aggregate-functions,date-comparison,Mongoose,Aggregate Functions,Date Comparison,Mongoose聚合$filter函数,在嵌套数组对象上使用日期比较lte和gte 我在Mongo中有一个模式,如下所示: 这是我使用$filter和$gte、$lte operator的聚合代码函数查询 我正在尝试过滤数据,以便在执行下面的代码时返回满足查询条件的数据。在这个输出中,我得到了b2数组中的空值 有人能告诉我正确的解决方案吗?当数据集上有可用数据时,为什么会出现这样的结果 如果对start和end变量使用ISODate而不是Date,结果是否会改变?嘿,Patrick,在这种情况下

Mongoose聚合$filter函数,在嵌套数组对象上使用日期比较lte和gte
  • 我在Mongo中有一个模式,如下所示:
  • 这是我使用$filter和$gte、$lte operator的聚合代码函数查询
  • 我正在尝试过滤数据,以便在执行下面的代码时返回满足查询条件的数据。在这个输出中,我得到了b2数组中的空值
  • 有人能告诉我正确的解决方案吗?当数据集上有可用数据时,为什么会出现这样的结果

  • 如果对
    start
    end
    变量使用
    ISODate
    而不是
    Date
    ,结果是否会改变?嘿,Patrick,在这种情况下不会改变结果。幸运的是,我犯了错误,我使用direct$b2作为输入数组,这是完全错误的,我必须将数组作为$s2.b2进行跟踪。因此,这种情况的解决方案是。{{$match:{“s2.b2.date”:{$gte:start,$lte:end}}},{$project:{“farmid”:1,“boxid”:1,“s2.b2”:{$filter:{input:“$s2.b2”,as:“data”,cond:{$and:[{$gte:[“$$data.date”,开始]},{$lte:[“$$data.date”,结束]}]},},}
    
    
         {
         "_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  
                        }
    
          }
    
    
      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 ] }]
                    }
                  }
                },
    
              }},
    
           }
    
    
    
        [
            {
                "_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    
                }
            }]