根据mongodb中对象的子元素过滤对象列表

时间:2019-06-26 06:34:00

标签: mongodb

这是我在MongoDB中的对象结构,View JSON structure here

{ "id": 1234, "hotel_id": 1, "data":[ { "date":"2019-06-21", "price": "150", "updated_at":"2019-05-20" }, { "date":"2019-06-22", "price": "155", "updated_at":"2019-05-20" }, { "date":"2019-06-23", "price": "157", "updated_at":"2019-05-20" }, { "date":"2019-06-24", "price": "159", "updated_at":"2019-05-21" }, { "date":"2019-06-25", "price": "159", "updated_at":"2019-05-22" }, { "date":"2019-06-26", "price": "159", "updated_at":"2019-05-23" } ] }

我想过滤具有update_at> 2019-05-21(x日期)的记录。

是否可以在两个特定日期之间获取数据,例如我想要日期在2019-06-212019-06-23之间的数据,而不希望获取其他记录。

1 个答案:

答案 0 :(得分:0)

使用当前的设计,您将不得不使用汇总,我真的不知道您的产品是什么,但这对我来说有点不对劲,我认为(如果可能)您应该考虑重新构建数据

话虽如此,我会这样:

db.collection.aggregate(
    [
        { 
            "$addFields" : {
                "temp" : {
                    "$objectToArray" : "$data"
                }
            }
        }, 
        { 
            "$match" : {
                "temp.v.updated_at" : {
                    "$gt" : "2019-05-21"
                }
            }
        }
    ], 
);

编辑: 计算记录只需在$ group阶段加上$ sum:

{
  $group: {
     _id: null,
     count: {$sum: 1}
  }
}