0

我有以下文件

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

有什么建议么?

4

1 回答 1

1

不幸的是,$ 位置运算符只返回第一个匹配项,因此您不能使用它来执行您想要执行的操作。

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

db.c.aggregate([
  { $unwind : "$a"},
  { $match  : { "a.u" : {$in :[3,123]} } },
  { $group  : {_id : "$_id",a : { $push : "$a" } } }
])
于 2013-05-25T18:35:20.000 回答