使用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 } )
当然,那不行。我将如何完成这项工作?
答案 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" }