检索子文档中数组的第一项而不获取其他子文档
Posted
技术标签:
【中文标题】检索子文档中数组的第一项而不获取其他子文档【英文标题】:Retrieve the first item of an array in a sub-document without getting other sub-documents 【发布时间】:2015-05-16 11:50:27 【问题描述】:在 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
、...)
我想以某种方式组合这两个查询,但不知道如何(除非在代码中检索)。
【问题讨论】:
【参考方案1】:您可以通过在投影中包含第二个不存在的 propA
字段来解决此问题:
collection.find(,
"propA.prop1": $slice: 1,
"propA.nonExistentField": 1,
"propB.prop2": 1
);
有点奇怪,但确实有效。
【讨论】:
这对我来说似乎是一个非常糟糕的 hack,但它确实有效 - 我希望 mongodb 不会很快“修复”它 @peter 同意,我建议您在打字时捏住鼻子。以上是关于检索子文档中数组的第一项而不获取其他子文档的主要内容,如果未能解决你的问题,请参考以下文章