javascript - Mongo,匹配_id在数组中的文档作为子文档的一部分

标签 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 中找到 _id 可以在 foo 数组中找到的所有文档(在本例中返回 _id 为 1 和 3 的 db.bars)。像这样:

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

当然,那是行不通的。我将如何着手完成这项工作?

最佳答案

您可以使用 collection.distinctfoo

中获取不同 _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/

相关文章:

node.js - 子项的子项内的 where 子句

java - mongodb java 检查插入是否成功

javascript - 无法读取从gson库生成的json文件

javascript - 延迟 JavaScript

javascript - 为什么 JavaScript 提交重新加载页面并通过按钮提交进行客户端页面验证

javascript - Console.log 在 Sublime Text 3 中不打印(使用 Node Build System)

javascript - React : location. 页面加载后首次导航时状态未定义

javascript - 由于某种原因, Mongoose 只保存密码哈希而不是所有字段

linux - Mongodb 使用 debian 包中的安装后脚本创建 root 用户

mongodb - mongodb 聚合随机化(洗牌)结果