【问题标题】:Mongo, match documents who's _id is in an array as part of a subdocumentMongo,匹配 _id 的文档作为子文档的一部分在数组中
【发布时间】:2015-07-25 00:46:32
【问题描述】:

使用 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 } )

当然,那是行不通的。我将如何实现这一目标?

【问题讨论】:

    标签: javascript mongodb


    【解决方案1】:

    您可以使用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" }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-26
      • 1970-01-01
      • 2015-01-05
      • 2022-01-09
      • 1970-01-01
      • 2015-08-19
      • 2014-01-02
      • 2022-11-05
      相关资源
      最近更新 更多