2013-05-25 129 views
0

返回匹配元素我有以下文件搜索在数组元素和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

不幸的是,$ positional operator只返回第一个匹配,所以你不能用它来做你正在做的事情。

但是,您可以使用aggregationmap-reduce。以下代码使用汇总框架完成您想要的操作:

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