【问题标题】: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、...)

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

【问题讨论】:

    标签: arrays mongodb mongoose subdocument


    【解决方案1】:

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

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

    有点奇怪,但确实有效。

    【讨论】:

    • 这对我来说似乎是一个非常糟糕的 hack,但它确实有效 - 我希望 mongodb 不会很快“修复”它
    • @peter 同意,我建议您在打字时捏住鼻子。
    猜你喜欢
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    • 2014-04-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    • 1970-01-01
    • 2015-09-03
    相关资源
    最近更新 更多