【发布时间】:2018-01-26 14:02:12
【问题描述】:
我正在使用 mongodb 和 mongoose 编写一个 node.js 应用程序。我似乎在理解如何查询“单个嵌套子文档”方面遇到问题。如果我有如下示例:
var childSchema = new Schema({ name: 'string' });
var parentSchema = new Schema({
// Array of subdocuments
children: [childSchema],
// Single nested subdocuments. Caveat: single nested subdocs only work
// in mongoose >= 4.2.0
child: childSchema
});
从 mongoose 文档中,我如何为单个嵌套场景填充子子文档?我尝试使用 ".populate("child").exec..." 但子对象返回 null 即使我可以找到是否从 mongo 命令行运行 db.child.find() 。现在我在文档中看到,您必须调用“parent.children.id(_id)”,但在这种情况下,我不会提前知道 _id。
更新:我删除了填充,它现在似乎可以工作了。
【问题讨论】:
-
数据是“嵌入的”,所以没有什么可“填充”的,因为它已经存在了。人口是指从其他集合中检索“参考”数据。对于现代 MongoDB 版本,或多或少被
$lookup取代。但这里也根本不需要。 -
你能给我看一个上面代码中的例子来演示它应该如何工作吗?
-
什么例子? “嵌入”意味着它“已经存在”。只需检索文档。任务完成。你有实际存储的东西吗?问题是什么?你做了什么?你还有什么不明白的?
-
所以,我假设你说它应该只填充而不调用填充方法。如果是这种情况,我也尝试过,但仍然收到 null for child。
-
你需要展示你实际在做什么以及你期望什么。这与基于呈现模式的“人口”无关。调用
.populate()的行为可能会弄乱您的结果。展示您如何保存数据并展示您如何尝试检索它。基本上阅读How to create a Minimal, Complete, and Verifiable example 并尝试按照那里的描述介绍您的案例。然后我们知道如何解决您的疑虑。或者你自己按照这个过程弄清楚。
标签: node.js mongodb mongoose mongoose-populate