如何仅过滤与猫鼬中的请求相对应的子文档

时间:2019-09-05 20:17:03

标签: mongoose

我在mongodb中有两个层次的分层文档。 集合名称称为书,它具有作者和作者的文凭,像这样的子文档:


const bookSchema = new mongoose.Schema({
    name: String,
    authors: [{
        authorName : String,
        diplomes :[{
             diplomeName: Strig,
             school: String
        }]
}],

})
module.exports = mongoose.model('book', bookSchema);


[ 
   { 
      "name":"name1",
      "authors":[ 
         { 
            "authorName":"authirname1-1",
            "diplomes":[ 
               { 
                  "diplomeName":"diplomename1-1-1",
                  "school":"school1-1-1"
               },
               { 
                  "diplomeName":"diplomename1-1-2",
                  "school":"school1-1-2"
               }
            ]
         },
         { 
            "authorName":"authirname1-2",
            "diplomes":[ 
               { 
                  "diplomeName":"diplomename1-2-1",
                  "school":"school1-1-1"
               },
               { 
                  "diplomeName":"diplomename1-2-2",
                  "school":"school1-2-2"
               }
            ]
         },

      ]
   },
   { 
      "name":"name2",
      "authors":[ 
         { 
            "authorName":"authirname2-1",
            "diplomes":[ 
               { 
                  "diplomeName":"diplomename2-1-1",
                  "school":"school2-1-1"
               },
               { 
                  "diplomeName":"diplomename2-1-2",
                  "school":"school2-1-2"
               }
            ]
         },
         { 
            "authorName":"authirname2-2",
            "diplomes":[ 
               { 
                  "diplomeName":"diplomename2-2-1",
                  "school":"school2-1-1"
               },
               { 
                  "diplomeName":"diplomename2-2-2",
                  "school":"school2-2-2"
               }
            ]
         },

      ]
   }
]

我想要只有学校等于1-2-2的学校还书 预期结果如下:

[ 
   { 
      "name":"name1",
      "authors":[ 
         { 
            "authorName":"authirname1-2",
            "diplomes":[ 
               { 
                  "diplomeName":"diplomename1-2-2",
                  "school":"school1-2-2"
               }
            ]
         }
      ]
   }
]

请提供任何帮助以使其正常运行 需要使用查找方法还是聚合?

1 个答案:

答案 0 :(得分:0)

我们可以使用位置$ []运算符检索此类数据,但是$ []运算符不允许深度2级搜索数据,这是您要在2级深度数组中搜索数据的情况。有关更多问题,请参阅Documentation