Javascript 如何在Mongoose中检索子文档

Javascript 如何在Mongoose中检索子文档,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我的数据库中有mongo集合: [ { "_id": "59955bb0cd522a00bcaab08c", "lang": "en", "__v": 0, "message_subsets": [ { "identifier": "errors", "_id": "59955bb0cd522a00bcaab08d",

我的数据库中有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]
});
我想从
message\u子集
数组项中检索所有
消息
,该数组项具有
“标识符”:“错误”
,如果其父项具有
“lang”:“en”
。 因为我对猫鼬和猫鼬有点陌生,所以我坚持这样做!!!你能帮我以正确的方式进行数据查询吗?谢谢。

这应该可以:

Collection.find({'messages.message_subsets.identifier':'errors', 'lang': 'en'}, {'messages': 1})
这应该起作用:

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

是的,但不完全是这样。我只想检索消息数组。@bashkovpd我已更新。这叫投影:嗯。。。也许我做错了什么,但该查询只返回主父元素的_id(其中指定了
lang
)。由于使用了mongoose,您可以直接在模式上进行查询,使用
MessageSchema.find({'message\u subsets.identifier':'errors','lang':'en'),{'messages':1})
是,但不完全正确。我只想检索消息数组。@bashkovpd我已更新。这叫投影:嗯。。。也许我做错了什么,但该查询只返回主父元素的_id(其中指定了
lang
)。由于使用了mongoose,您可以直接在模式上进行查询,使用
MessageSchema.find({'message\u subsets.identifier':'errors',lang:'en',{'messages':1})