【发布时间】:2013-10-10 00:44:07
【问题描述】:
我现在面临一个问题,无法找到解决方案。 我在每个文档的数组中有一个包含子文档的集合,我想为每个子文档检索一个文档。
举个例子会更容易解释。假设我有一个集合的“模式”:
{
a: String,
b: [String]
}
其中 a 和 b 都是必需的。 此集合的文档如下所示:
{
a : 'hey',
b: ['me', 'you']
}
我想找到一种方法来进行猫鼬查询,它不会按原样返回此文档,而是这两个文档:
[{
a: 'hey',
b: 'me'
},
{
a: 'hey',
b: 'you'
}]
这可能吗?
提前致谢。
附: : 我知道一旦我用一个简单的 JS 函数检索了列表,我就可以做到这一点,但我迫不及待地想检索完整的列表并开始使用它。
【问题讨论】:
-
如果不使用聚合框架,你不能在数据库上做这样的投影(这似乎不太适合这里),即使你可以,结果也不匹配声明的架构?您需要绕过 mongoose,并按照您想要的方式构建结果。
-
@WiredPrairie 为什么您不认为聚合框架不适合?另外,我不需要结果与 Schema 相匹配,只是为了解释文档在集合中的格式。
-
为什么?因为它的结果有限(不超过 16MB),并且随着文档模式的发展变得更加难以管理。您需要“投影”字段等。它旨在聚合、求和、分组,而不是扩展。
-
另外,我认为这种类型的工作是“忙碌的工作”,最好留给客户,而不是让大多数应用程序最昂贵的方面来完成这样的任务。您发回的二进制数据比实际存储在数据库中的要多。
-
您可以选择不同意。这是您的应用程序以及您的计算资源和金钱。只要记住支持的成本更高。