如何在mongodb中对数组内容应用过滤器

时间:2013-12-12 11:25:46

标签: mongodb

我有一个集合,其中包含数组格式的数据,如下所示。

db.mycollection.save(
{
    "username": "jain",
    "options": [
        {
            "expiration_dt": "2016-01-15",
            "isMini": false
        },
        {
            "expiration_dt": "2014-01-18",
            "isMini": true
        },
        {
            "expiration_dt": "2014-01-18",
            "isMini": false
        }
    ]
}
)

以这样的方式编写查询:它将基于expiration_dt字段对名为'options'的数组的元素进行排序,并返回获得结果的第一个元素。

这是执行该工作的查询

db.mycollection.aggregate({$match : {"username" : "jain"}},{$unwind: "$options"},{$sort: {"options.expiration_dt":1}},{$limit : 1})

我的问题是,我可以在上面的查询中包含基于 isMini 字段的过滤器(因为我现在遇到的问题是,如果一个数组由相同的 expiration_dt <组成/ strong>,它返回了我在该数组中出现的第一个匹配元素。 所以我想再添加一个基于 isMini 属性的过滤器,这样即使它具有相同的expiration_dt,它也会返回正确的数据。

1 个答案:

答案 0 :(得分:1)

按如下方式更新您的查询,以便它只能找到 isMini = false

的子文档
db.mycollection.aggregate(
  {$unwind: "$options"},
  {$match : {"username" : "jain", "options.isMini" : false}},
  {$sort: {"options.expiration_dt":1}},
  {$limit : 1}
)