在MongoDB中 - 如何只检索属性中数组的第一项?
我有一个嵌套文档并使用$text
进行查询(但这并不重要,普通查询也不起作用)
我的文件结构:
{
"_id": ObjectId("...."),
"propA": {
"prop1": [
{ ... }, // this is what I want to see
{ ... },
...
],
"prop2": { ... },
"prop3": { ... },
...
},
"propB": {
"prop1": { ... }, // +this, but that's not a problem
"prop2": { ... },
"prop3": { ... },
...
},
"propC": { ... },
...
}
当我跑
时collection.find({}, { "propA.prop1": 1, "propB.prop2": 1 });
我在propA.prop1
获得完整数组。我跑的时候
collection.find({}, { "propA.prop1": {$slice: 1}, "propB.prop2": 1 });
我只获得propA.prop1
的第一项,但我也获得propA
内的所有其他项目(例如propA.prop2
,propA.prop3
,...)
我想以某种方式组合这两个查询,但无法弄清楚如何(除了在代码中检索之后)。
答案 0 :(得分:2)
您可以通过在投影中添加第二个不存在的propA
字段来解决此问题:
collection.find({}, {
"propA.prop1": {$slice: 1},
"propA.nonExistentField": 1,
"propB.prop2": 1
});
有点奇怪,但它确实有效。