javascript - 查询引用文档的字段

标签 javascript node.js mongodb mongoose mongodb-query

有 2 个集合“ Actor ”和“电影”

1 个 Actor 的示例:

{
  _id: ObjectId("54f38bd9b814dca762778032"),
  name: {
    first: 'Jason',
    last: 'Statham'
  }
}

两部电影的示例

{
  _id: ObjectId("54f5cbaf4d9f1129335993ef"),
  title: 'Fast & Furious 7',
  actors: [
    ObjectId("54f38bd9b814dca762778032")
  ]
},
{
  _id: ObjectId("54f782493e7688c31f75307d"),
  title: 'Parker',
  actors: [
    ObjectId("54f38bd9b814dca762778032")
  ]
}

如何查找杰森·斯坦森的电影? 我使用 Node.js + Express + Mongoose

谢谢

最佳答案

这称为请求“加入”,这是 MongoDB 无法做到的。

您可以使用数组 .filter()在运行后的代码中 .populate() ,但当然需要首先拉动“一切”。您甚至可以指定对 .populate() 的查询来匹配您的条件。但这仍然意味着选择所有的 parent 。

您还可以将“parentId”添加到“child”,这样您就可以查询“child”集合,仅选择与父集合匹配的文档,或者根据需要以这种方式“反向填充”。

或者您可以使用"embedding"而不是尝试重现关系模型并使用 NoSQL 引擎来实现其设计目的。那么你所要求的就有效了。

{
    _id: ObjectId("54f5cbaf4d9f1129335993ef"),
    "title": "Fast & Furious 7",
    "actors: [
        { "first": "Jason",  "last": "Statham" }  
    ]
},
{
    "_id": ObjectId("54f782493e7688c31f75307d"),
    "title": "Parker",
    "actors": [
        { "first": "Jason",  "last": "Statham" }
    ]
}

当然,与关系模型和引用模型相比,它重复了数据,但这就是提高效率的成本。

如果您不想使用 NoSQL 存储解决方案来获得其应提供的功能的好处,那么就会产生成本。正如他们所说,马为类(class),所以选择正确的工具并以正确的方式使用。

关于javascript - 查询引用文档的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28890752/

相关文章:

javascript - ModalPopupExtender setfocus 问题

javascript - 对象数组的 Graphql 输入类型

javascript - Socket.io sessionStore,store.get 方法不存在

mongodb - MongoDB 中的 find() 和 findOne() 方法显示不同的结果

json - 如何使用 mongoose 和异步 waterfall 模型在 MongoDb 中存储数据

Javascript - 使用密码加密数据的最佳方式

javascript - 如何实现长时间的网页加载?

javascript - XHR 进度仅触发一次

node.js - FUNCTION_ERROR_INIT_FAILURE AWS lambda

node.js - 运行 vs-mda-remote 时出错