mongodb-查询对象字段和数组字段

问题描述

{
            "_id": "5f6b45ad73cac785f0e7504c","user_id": "zzzz","survey_id": "40","questionList": [
                {
                    "isDelete": 1,"choices": [
                        {
                            "_id": "5f6b45ad73cac785f0e75068","name": "Choice1","value": "","score": 12,"disqualifier": "true"
                        },{
                            "_id": "5f6b45ad73cac785f0e75067","name": "choice2","score": 21,{
                            "_id": "5f6b45ad73cac785f0e75066","name": "choice3","disqualifier": "false"
                        }
                    ],"_id": "5f6b45ad73cac785f0e75065","type": "mcq","name": "Multi Choice","value": "choice2","isMandatory": "true"
                },{
                    "isDelete": 0,"choices": [
                        {
                            "_id": "5f6b45ad73cac785f0e75064","name": "option1",{
                            "_id": "5f6b45ad73cac785f0e75063","name": "option2","disqualifier": "false"
                        },{
                            "_id": "5f6b45ad73cac785f0e75062","name": "option3","score": 33,"_id": "5f6b45ad73cac785f0e75061","type": "dropdown","name": "dropdown","value": "option2","isMandatory": "true"
                }

我需要在file_id和user_id上放置一个文件管理器,并且需要选择QUESTIONLIST中isDelete为1的所有对象。我确实尝试了太多稀释,但似乎没有任何作用,还是我错了? 这就是我尝试过的一切

 await surveyfinal.find({$and:[{survey_id:req.body.survey_id},{user_id:req.body.user_id},{questionList:{$elemmatch:{isDelete:1}}}]})

await surveyfinal.find({user_id:req.body.user_id},{questionList:{$elemmatch:{isDelete:1}}} )

await surveyfinal.find({$and:[{user_id:req.body.user_id},{survey_id:req.body.survey_id},{"questionList.isDelete":1} ]})

解决方法

如果您的目标是仅从questionList数组中获取与给定survey_iduser_id匹配的文档的相关数组元素,则可以使用以下聚合来实现:

db.collection.aggregate([
  {
    $match: {
      "user_id": "zzzz","survey_id": "40","questionList.isDelete": 1
    }
  },{
    $project: {
      questionList: {
        $filter: {
          input: "$questionList",as: "questionList",cond: {
            $eq: [ "$$questionList.isDelete",1 ]
          }
        }
      }
    }
  }
])

查看我在mongoplayground上创建的示例。