微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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上创建的示例。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。