检索子文档中数组的第一项而不获取其他子文档

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.prop2propA.prop3、...)

我想以某种方式组合这两个查询,但不知道如何(除非在代码中检索)。

【问题讨论】:

【参考方案1】:

您可以通过在投影中包含第二个不存在的 propA 字段来解决此问题:

collection.find(,  
    "propA.prop1": $slice: 1,
    "propA.nonExistentField": 1,
    "propB.prop2": 1
);

有点奇怪,但确实有效。

【讨论】:

这对我来说似乎是一个非常糟糕的 hack,但它确实有效 - 我希望 mongodb 不会很快“修复”它 @peter 同意,我建议您在打字时捏住鼻子。

以上是关于检索子文档中数组的第一项而不获取其他子文档的主要内容,如果未能解决你的问题,请参考以下文章

MongodB 通过属性名称检索子文档

猫鼬子文档数组更新[重复]

从两个排序数组中获取前 K 项而不合并它们

检索子值 -firebase-

使用 OleDb 从 Excel 文档中获取第一张工作表,而不考虑工作表名称

列出 R 包依赖项而不安装包