我有一个集合,其中包含数组格式的数据,如下所示。
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,它也会返回正确的数据。
答案 0 :(得分:1)
按如下方式更新您的查询,以便它只能找到 isMini = false
的子文档db.mycollection.aggregate(
{$unwind: "$options"},
{$match : {"username" : "jain", "options.isMini" : false}},
{$sort: {"options.expiration_dt":1}},
{$limit : 1}
)