我有以下文件
db.c.save({a:[{u:3},{u:6},{u:123}]});
我想从数组中获取匹配的元素。所以我使用以下查询来做到这一点。
db.c.find({'a.u':{$in:[3,123]}},{'a.$':1});
这给了我{ "a" : [ { "u" : 3 } ] }
,但我想它应该返回{ "a" : [ { "u" : 3 }, { "u" : 123 } ] }
有什么建议吗?
答案 0 :(得分:1)
不幸的是,$ positional operator只会返回第一个匹配项,因此您无法使用它来执行您要执行的操作。
但是,您可以使用aggregation或map-reduce。以下代码使用聚合框架执行您想要的操作:
db.c.aggregate([
{ $unwind : "$a"},
{ $match : { "a.u" : {$in :[3,123]} } },
{ $group : {_id : "$_id",a : { $push : "$a" } } }
])