【问题标题】:How to retrieve subdocument in Mongoose如何在猫鼬中检索子文档
【发布时间】:2017-08-17 21:05:28
【问题描述】:

我的数据库中有 mongo 集合:

[
    {
        "_id": "59955bb0cd522a00bcaab08c",
        "lang": "en",
        "__v": 0,
        "message_subsets": [
            {
                "identifier": "errors",
                "_id": "59955bb0cd522a00bcaab08d",
                "messages": [
                    {
                        "identifier": "invalid",
                        "message_text": "$FIELD$ is invalid",
                        "_id": "59955bb0cd522a00bcaab091"
                    },
                    {
                        "identifier": "empty",
                        "message_text": "$FIELD$ is required",
                        "_id": "59955bb0cd522a00bcaab090"
                    }
                ]
            }
        ]
    },
    {
        "_id": "59955bb0cd522a00bcaab08c",
        "lang": "ru",
    ...
]

这是由这个猫鼬模式构造的:

const MessageSchema = new mongoose.Schema({
    identifier: {
        type: String,
        unique: true,
        required: true,
        trim: true
    },
    message_text: {
        type: String,
        required: true,
        trim: true
    }
});

const MessageSubsetSchema = new mongoose.Schema({
    identifier: {
        type: String,
        unique: true,
        required: true,
        trim: true
    },
    messages: [MessageSchema]
});

const LangMessageSetSchema = new mongoose.Schema({
    lang: {
        type: String,
        unique: true,
        required: true,
        trim: true
    },
    message_subsets: [MessageSubsetSchema]
});

如果父项具有"lang": "en",我想从具有"identifier": "errors"message_subsets 数组项中检索所有messages。 因为我对 mongoose 和 mongo 有点陌生,所以我坚持了!!!你能帮我以正确的方式进行数据查询吗?谢谢。

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

    这应该可行:

    Collection.find({'messages.message_subsets.identifier':'errors', 'lang': 'en'}, {'messages': 1})
    

    【讨论】:

    • 是的,但不完全是。我想只检索消息数组。
    • @bashkovpd 我已经更新了。称为投影:docs.mongodb.com/manual/reference/operator/projection/…
    • 嗯...也许我做错了什么,但该查询仅返回主父元素的_id(指定lang)。
    • 因为您使用过 mongoose,您可以直接通过 Schema 进行查询,请使用 MessageSchema.find({'message_subsets.identifier':'errors', 'lang': 'en'}, {'messages': 1})
    猜你喜欢
    • 1970-01-01
    • 2017-11-24
    • 2014-10-30
    • 2019-06-06
    • 2021-10-07
    • 2017-01-26
    • 1970-01-01
    • 2015-02-23
    • 2012-11-07
    相关资源
    最近更新 更多