gpt4 book ai didi

javascript - 查询引用文档的字段

转载 作者:行者123 更新时间:2023-11-28 19:21:08 25 4
gpt4 key购买 nike

有 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com