使用 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 中找到 _id 可以在 foo 数组中找到的所有文档(在本例中返回 _id 为 1 和 3 的 db.bars)。像这样:
var foos = db.foos.findOne( { _id: 1 } )
db.bars.find( _id: { $in: foos.foo.bar_id } )
当然,那是行不通的。我将如何着手完成这项工作?
最佳答案
您可以使用 collection.distinct
从 foo
_id
值的方法
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" }
关于javascript - Mongo,匹配_id在数组中的文档作为子文档的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31615208/