javascript - 如何在 MongoDB 中按引用字段查询?

标签 javascript node.js mongodb mongoose aggregation-framework

我有两个 Mongo 模式:

用户:

{
  _id: ObjectId,
  name: String,
  country: ObjectId // Reference to schema Country
}

国家:

{
  _id: ObjectId,
  name: String
}

我想获取所有国家名称为“VietNam”的用户。

对于这种情况,我可以使用哪种查询(仅限用户架构)?

我希望它看起来像这个 SQL 查询:

SELECT * 
FROM User
JOIN Country 
ON User.country = Country._id 
WHERE Country.name = 'VietNam'

最佳答案

您可以在 mongodb 3.6 及更高版本中使用以下聚合

db.country.aggregate([
  { "$match": { "name": "VietNam" } },
  { "$lookup": {
    "from": Users.collection.name,
    "let": { "countryId": "$_id" },
    "pipeline": [
      { "$match": { "$expr": { "$eq": [ "$country", "$$countryId" ] } } },
    ],
    "as": "users",
  }},
  { "$unwind": "$users" },
  { "$replaceRoot": { "newRoot": "$users" }}
])

关于javascript - 如何在 MongoDB 中按引用字段查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54642073/

相关文章:

node.js - express req.pipe() 不起作用

java - 使用 Java 从 Mongodb 检索字段子集

javascript - Dhtml 转换

javascript - 如何在 cucumber.js 的 AfterStep 钩子(Hook)中获取步骤结果

javascript - Node.js:从字符串读取电子邮件的正则表达式

c# - 是否可以使用 mongodb C# 驱动程序将自定义字段添加到 gridfs

mongodb - 使用gridfs处理mongodb中的文件

javascript - PHP:如何根据数百个用户选项提供定制内容?

javascript - 使用绝对位置使用 Tailwind CSS 将图像放在另一个图像之上

javascript - 为什么选择 JavaScript 作为 UI 测试自动化的语言?