在数组中搜索元素并返回mongodb中的匹配元素

时间:2013-05-25 17:48:34

标签: mongodb

我有以下文件

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 } ] }

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

不幸的是,$ positional operator只会返回第一个匹配项,因此您无法使用它来执行您要执行的操作。

但是,您可以使用aggregationmap-reduce。以下代码使用聚合框架执行您想要的操作:

db.c.aggregate([
  { $unwind : "$a"},
  { $match  : { "a.u" : {$in :[3,123]} } },
  { $group  : {_id : "$_id",a : { $push : "$a" } } }
])
相关问题