我的Mongo数据库中有两个集合,Foo包含对一个或多个Bar的引用:

Foo: { 
  prop1: true,
  prop2: true,
  bars: [
     {
     "$ref": "Bar",
     "$id": ObjectId("blahblahblah")
     }
  ]
}

Bar: {
   testprop: true
}

我想要的是找到所有Foo个至少有一个Bar的测试属性设置为true的.我try 过这个命令,但它没有返回任何结果:

db.Foo.find({ "bars.testprop" : { "$in": [ true ] } })

有什么 idea 吗?

推荐答案

现在可以在Mongo 3.2中使用$lookup

$lookup需要四个参数

from:指定同一数据库中要执行联接的集合.无法分割来自集合的数据.

localField:指定从文档输入到$lookup阶段的字段$lookup在localField和from集合文档中的foreignField上执行相等匹配.

foreignField:指定"发件人"集合中文档的字段.

as:指定要添加到输入文档的新数组字段的名称.新数组字段包含来自集合的匹配文档.

db.Foo.aggregate(
  {$unwind: "$bars"},
  {$lookup: {
    from:"bar",
    localField: "bars",
    foreignField: "_id",
    as: "bar"

   }},
   {$match: {
    "bar.testprop": true
   }}
)

Node.js相关问答推荐

在我的Next.js应用程序中没有正确设置Process.env.NODE_ENV

GitLab SAST中的Nodejcan未找到匹配项

try 使用Express和连接池将数据插入MySQL数据库时出现拒绝访问错误

仅在一次查询中 MongoDB 上最近的一对位置

在全局对象上声明的函数

如何在带有 JS 的 Nodejs 中使用没有 Async 方法的 Await

如何使用 node.js 将两个或多个 API 请求组合成一个端点并表达

如何防止 Chrome 通过 Selenium 崩溃?

使用 fs.createWriteStream 将数据写入 bigquery (node.js) 时出现模式错误

为什么 $or 在带有正则表达式的mongoose 中不能正常工作

try 在 Heroku 中部署 PRN 应用程序并获得 404

Winston http 日志(log)级别的行为与 info 不同

如何刷新 youtube-data-api v3 的访问令牌

baseurl64 缓冲区解码

等价于 Node.js 的 Rails 控制台

在多个 .env 文件之间切换,例如 .env.development 和 node.js

Node.js 应用程序有周期性的缓慢和/或超时(不接受传入的请求)

使用 Node.js 我得到错误:EISDIR,读取

使用 node.js 循环 JSON

要求('babel/register')不起作用