如何在 MongoDB 中查询引用的对象? [英] How do I query referenced objects in MongoDB?

查看:83
本文介绍了如何在 MongoDB 中查询引用的对象?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I've got two collections in my Mongo database, and the Foos contain references to one or more Bars:

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

Bar: {
   testprop: true
}

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

What I want is to find all of the Foos that have at least one Bar that has its testprop set to true. I've tried this command, but it doesn't return any results:

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

有什么想法吗?

推荐答案

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

You can now do it in Mongo 3.2 using $lookup

$lookup 接受四个参数

from:指定同一数据库中的集合以执行连接.from 集合不能分片.

from: Specifies the collection in the same database to perform the join with. The from collection cannot be sharded.

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

localField: Specifies the field from the documents input to the $lookup stage. $lookup performs an equality match on the localField to the foreignField from the documents of the from collection.

foreignField:指定from集合中文档的字段.

foreignField: Specifies the field from the documents in the from collection.

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

as: Specifies the name of the new array field to add to the input documents. The new array field contains the matching documents from the from collection.

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

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

这篇关于如何在 MongoDB 中查询引用的对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆