匹配's _id在数组中作为子文档的一部分的文档

Mongo, match documents who's _id is in an array as part of a subdocument

本文关键字:文档 数组 一部分 id 匹配      更新时间:2023-09-26

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

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

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

和下面的db.bars集合:

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

我想找到db中的所有文档。bar谁的_id可以在foo数组中找到(返回db。在本例中,包含_id 1和3的栏)。像这样:

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