【发布时间】:2016-02-23 05:38:19
【问题描述】:
这是一个典型的文档
{
title : 'someTitle',
places : [{name : 'someName', location : 'someLocation'}, {name ...}]
}
我有以下查询
var qs = {title : 'someTitle', places : {$elemMatch : {name : 'someName' } } };
我选择了一个与标题匹配的文档,并且该文档在其“places”数组中包含一个名称等于“someName”的文档条目。但是问题是places 数组中的条目是大型文档,我只需要该文档中的几个字段。我尝试像这样投影字段,但它不起作用。
var projection = {'places.$.name': 1, 'places.$.location' : 1};
它应该返回一个数组,其中的文档仅包含 'name' 和 'location' 属性。
我收到以下错误
Can't canonicalize query: BadValue Cannot specify more than one positional proj. per query.
说清楚,我想在没有聚合框架的情况下完成这个
【问题讨论】:
-
这是预期的行为。您应该考虑编辑您的问题以显示具有预期结果的示例文档。
-
根据docs,如果没有聚合框架,您将无法做到这一点。
-
我将切换到 agg 框架,我只是弃权,因为它的计算量更大,这是我应用程序的核心部分。谢谢
-
在我的示例中我没有使用
$elemMatch- 也许这就是我可以在数组上使用投影的原因。但我不得不省略$。我的投影看起来像这样var projection = {'places.name': 1, 'places.location' : 1};。在 MongoDB 3.4 中测试
标签: mongodb mongoose mongodb-query aggregation-framework