猫鼬从模型中的数组中查找对象

Posted

技术标签:

【中文标题】猫鼬从模型中的数组中查找对象【英文标题】:mongoose find an object from an array in a model 【发布时间】:2021-01-24 14:29:08 【问题描述】:

我遇到了一些困难,因为我很固执,没有为选择单独制作模型。所以我有一个问题模型,它有一个嵌入的选择模式,它包含一系列选择,每个对象都有他的 id。我只想返回给定 id 的选择,所以经过多次尝试后,我使用了

Question.findOne("choices._id": choiceId)
        .select('choices')

但它返回了我在数组中具有该 id 的问题,以及其他选择。例如,我正在寻找 id 为 5f7f05f8aec5103db6c15534 的选择,但它返回所有选择:


    "_id": "5f7f05f8aec5103db6c15532",
    "choices": [
        
            "isCorrect": false,
            "_id": "5f7f05f8aec5103db6c15534",
            "content": "pe asta"
        ,
        
            "isCorrect": true,
            "_id": "5f7f05f8aec5103db6c15533",
            "content": "pe asta update 2"
        
    ]

是否有可能返回数组中唯一具有该 ID 的对象?

【问题讨论】:

【参考方案1】:

你可以试试这个,

Question.findOne( 'choices._id':  $elemMatch:  _id: choiceId   , function (err, question) 
    // your code goes here
);

【讨论】:

错误:不能使用 $elemMatch Question.find().elemMatch("choices", _id:choiceId) 改变了语法,仍然得到和以前一样的响应 你也可以试试:Question.findOne( 'choices._id': choiceId , 'choices.$': 1 );

以上是关于猫鼬从模型中的数组中查找对象的主要内容,如果未能解决你的问题,请参考以下文章

如何在猫鼬模型内的数组中查找对象?

猫鼬从对象中删除属性

Mongoose 模型对象行为异常

猫鼬更新数组对象中的字段

如何在子文档中填充模型实例数组? MongoDB猫鼬

将文档推送到猫鼬模型数组中的子文档中