1

在 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, ...)

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

4

1 回答 1

2

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

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

有点奇怪,但它有效。

于 2015-03-13T22:57:00.890 回答