这是一个典型的文档。
为了清晰明确起见,我希望在不使用聚合框架的情况下实现这个目标。
{
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.
为了清晰明确起见,我希望在不使用聚合框架的情况下实现这个目标。
$elemMatch
- 也许这就是为什么我可以在数组上使用投影的原因。但是我不得不省略$
。我的投影看起来像这样var projection = {'places.name': 1, 'places.location' : 1};
。在MongoDB 3.4中测试过。 - SimonSimCity