Mongo,将_id作为子文档的一部分放在数组中

时间:2015-07-24 16:12:43

标签: javascript mongodb

使用MongoDB,我想在一个集合中查找_id显示在另一个集合中的子文档数组中的所有文档。使用$ in运算符在这里并不真正起作用,因为我只是尝试匹配子文档中的单个值。

假设我有来自db.foos的以下文档:

{ _id: 1, foo: [ { bar_id: 1 }, { bar_id: 3 } ] }

以及以下db.bars集合:

{ _id: 1, foo: "bar" }
{ _id: 2, foo: "abr" }
{ _id: 3, foo: "rab" }

我想在db.bars中找到所有可以在foo数组中找到_id的文件(在这种情况下返回带有_id 1和3的db.bars)。像这样:

var foos = db.foos.findOne( { _id: 1 } )
db.bars.find( _id: { $in: foos.foo.bar_id } )

当然,那不行。我将如何完成这项工作?

1 个答案:

答案 0 :(得分:1)

您可以使用collection.distinct方法从_id

获取不同的foo
db.bars.find({ '_id': { '$in': db.foos.distinct('foo.bar_id', {'_id': 1}) }})

演示:

> db.foos.distinct('foo.bar_id', {'_id': 1})
[ 1, 3 ]
> db.bars.find({ '_id': { '$in': db.foos.distinct('foo.bar_id', {'_id': 1})}})
{ "_id" : 1, "foo" : "bar" }
{ "_id" : 3, "foo" : "rab" }