如何在mongodb中查询对象的嵌套数组?

阿伦·耶吉

我试图从节点js查询mongodb中的嵌套对象数组,尝试了所有解决方案,但没有运气。谁能帮忙呢?

我试过以下:

{
              "name": "Science",
              "chapters": [
                 {
                     "name": "ScienceChap1",
                     "tests": [
                        {
                            "name": "ScienceChap1Test1",
                            "id": 1,
                            "marks": 10,
                            "duration": 30,
                            "questions": [
                               {
                                   "question": "What is the capital city of New Mexico?",
                                   "type": "mcq",
                                   "choice": [
                                      "Guadalajara",
                                      "Albuquerque",
                                      "Santa Fe",
                                      "Taos"
                                   ],
                                   "answer": [
                                      "Santa Fe",
                                      "Taos"
                                   ]
                               },
                               {
                                   "question": "Who is the author of beowulf?",
                                   "type": "notmcq",
                                   "choice": [
                                      "Mark Twain",
                                      "Shakespeare",
                                      "Abraham Lincoln",
                                      "Newton"
                                   ],
                                   "answer": [
                                      "Shakespeare"
                                   ]
                               }
                            ]
                        },
                        {
                            "name": "ScienceChap1test2",
                            "id": 2,
                            "marks": 20,
                            "duration": 30,
                            "questions": [
                               {
                                   "question": "What is the capital city of New Mexico?",
                                   "type": "mcq",
                                   "choice": [
                                      "Guadalajara",
                                      "Albuquerque",
                                      "Santa Fe",
                                      "Taos"
                                   ],
                                   "answer": [
                                      "Santa Fe",
                                      "Taos"
                                   ]
                               },
                               {
                                   "question": "Who is the author of beowulf?",
                                   "type": "notmcq",
                                   "choice": [
                                      "Mark Twain",
                                      "Shakespeare",
                                      "Abraham Lincoln",
                                      "Newton"
                                   ],
                                   "answer": [
                                      "Shakespeare"
                                   ]
                               }
                            ]
                        }
                     ]
                 }
              ]
          }

到目前为止,这是我尝试过的方法,但仍然无法正常工作

db.quiz.find({name:"Science"},{"tests":0,chapters:{$elemMatch:{name:"ScienceCh‌​ap1"}}})
db.quiz.find({ chapters: { $elemMatch: {$elemMatch: { name:"ScienceChap1Test1" } } }}) 
db.quiz.find({name:"Science"},{chapters:{$elemMatch:{$elemMatch:{name:"Scienc‌​eChap1Test1"}}}}) ({ name:"Science"},{ chapters: { $elemMatch: {$elemMatch: { name:"ScienceChap1Test1" } } }})
阿卜杜拉·拉希德(Abdullah Rasheed)

汇总框架

您可以使用聚合框架来转换和合并集合中的文档以显示给客户端。您建立了一个通过多个构建块来处理文档流的管道:过滤,投影,分组,排序等。

如果要从名为“ ScienceChap1Test1”的测试中获得mcq类型的问题,请执行以下操作:

db.quiz.aggregate(
    //Match the documents by query. Search for science course
    {"$match":{"name":"Science"}},

    //De-normalize the nested array of chapters.
    {"$unwind":"$chapters"},
    {"$unwind":"$chapters.tests"},

    //Match the document with test name Science Chapter
    {"$match":{"chapters.tests.name":"ScienceChap1test2"}},

    //Unwind nested questions array
    {"$unwind":"$chapters.tests.questions"},

    //Match questions of type mcq
    {"$match":{"chapters.tests.questions.type":"mcq"}}
).pretty()

结果将是:

{
    "_id" : ObjectId("5629eb252e95c020d4a0c5a5"),
    "name" : "Science",
    "chapters" : {
        "name" : "ScienceChap1",
        "tests" : {
            "name" : "ScienceChap1test2",
            "id" : 2,
            "marks" : 20,
            "duration" : 30,
            "questions" : {
                "question" : "What is the capital city of New Mexico?",
                "type" : "mcq",
                "choice" : [
                    "Guadalajara",
                    "Albuquerque",
                    "Santa Fe",
                    "Taos"
                ],
                "answer" : [
                    "Santa Fe",
                    "Taos"
                ]
            }
        }
    }
}

$ elemMatch不适用于子文档。您可以使用来使用聚合框架进行“数组过滤” $unwind

您可以在上述代码中从聚合管道中每个命令的底部删除每一行,以观察管道行为。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Mongoose MongoDB:更新嵌套数组中的对象

来自分类Dev

MongoDB:查询嵌套数组

来自分类Dev

Mongodb,嵌套数组中的搜索对象

来自分类Dev

您应该如何通过mongodb(Meteor)中的嵌套数组查询集合?

来自分类Dev

如何在猫鼬中查询嵌套数组

来自分类Dev

如何在mongoDB中使用findOne获取此查询表单嵌套数组

来自分类Dev

比较嵌套数组中的对象-mongoDB

来自分类Dev

如何在mongoDB或Mongoose中更新嵌套数组的值

来自分类Dev

在javascript中如何在具有嵌套数组的对象数组中查找值

来自分类Dev

如何在React Native中获取数组对象内的嵌套数组对象

来自分类Dev

MongoDB查询可从嵌套数组中过滤子文档

来自分类Dev

Mongodb:如何在对象的嵌套数组中转换字段

来自分类Dev

如何在MongoDB中的$ group内创建嵌套数组?

来自分类Dev

如何在findOne中过滤猫鼬中的嵌套数组而无需嵌套对象

来自分类Dev

如何在mongodb中查询嵌套对象

来自分类Dev

MongoDB:如何在嵌套数组中设置字段值

来自分类Dev

比较嵌套数组中的对象-mongoDB

来自分类Dev

如何在MongoDB中更新嵌套数组中的数据

来自分类Dev

Mongodb,嵌套数组中的搜索对象

来自分类Dev

MongoDB:如何从嵌套数组中的文档中删除对象

来自分类Dev

您应该如何通过mongodb(Meteor)中的嵌套数组查询集合?

来自分类Dev

如何从命令行查询mongodb中的嵌套数组

来自分类Dev

如何在mongoDB中使用findOne获取此查询形式的嵌套数组

来自分类Dev

查询嵌套数组中的元素总数-嵌入文档MongoDB

来自分类Dev

如何在Mongoose中删除带有其对象ID的嵌套数组对象值?

来自分类Dev

对象中的嵌套数组

来自分类Dev

如何在 iOS Swift 中的嵌套数组(对多关系)中根据条件过滤对象数组

来自分类Dev

在 mongodb 中查询深度嵌套数组

来自分类Dev

MongoDB:如何查询嵌套数组特定元素?

Related 相关文章

  1. 1

    Mongoose MongoDB:更新嵌套数组中的对象

  2. 2

    MongoDB:查询嵌套数组

  3. 3

    Mongodb,嵌套数组中的搜索对象

  4. 4

    您应该如何通过mongodb(Meteor)中的嵌套数组查询集合?

  5. 5

    如何在猫鼬中查询嵌套数组

  6. 6

    如何在mongoDB中使用findOne获取此查询表单嵌套数组

  7. 7

    比较嵌套数组中的对象-mongoDB

  8. 8

    如何在mongoDB或Mongoose中更新嵌套数组的值

  9. 9

    在javascript中如何在具有嵌套数组的对象数组中查找值

  10. 10

    如何在React Native中获取数组对象内的嵌套数组对象

  11. 11

    MongoDB查询可从嵌套数组中过滤子文档

  12. 12

    Mongodb:如何在对象的嵌套数组中转换字段

  13. 13

    如何在MongoDB中的$ group内创建嵌套数组?

  14. 14

    如何在findOne中过滤猫鼬中的嵌套数组而无需嵌套对象

  15. 15

    如何在mongodb中查询嵌套对象

  16. 16

    MongoDB:如何在嵌套数组中设置字段值

  17. 17

    比较嵌套数组中的对象-mongoDB

  18. 18

    如何在MongoDB中更新嵌套数组中的数据

  19. 19

    Mongodb,嵌套数组中的搜索对象

  20. 20

    MongoDB:如何从嵌套数组中的文档中删除对象

  21. 21

    您应该如何通过mongodb(Meteor)中的嵌套数组查询集合?

  22. 22

    如何从命令行查询mongodb中的嵌套数组

  23. 23

    如何在mongoDB中使用findOne获取此查询形式的嵌套数组

  24. 24

    查询嵌套数组中的元素总数-嵌入文档MongoDB

  25. 25

    如何在Mongoose中删除带有其对象ID的嵌套数组对象值?

  26. 26

    对象中的嵌套数组

  27. 27

    如何在 iOS Swift 中的嵌套数组(对多关系)中根据条件过滤对象数组

  28. 28

    在 mongodb 中查询深度嵌套数组

  29. 29

    MongoDB:如何查询嵌套数组特定元素?

热门标签

归档