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

时间:2019-05-10 10:05:08

标签: mongodb

我在MongoDB中有一个复杂的收藏集。在此,我想基于departments查询subDeptName数据。我在db.getCollection('users').find({"departments.subDeptName" : "Java"})下面使用了查询,但是它获取部门的所有数组元素。我只想查询"subDeptName" : "Java"所在的部门。我们该怎么做?

{
    "firstName" : "John",
    "lastName" : "Kerr",
    "email" : "john.kerr@gmail.com",
    "countryName" : "USA",
    "usRestrictionSw" : "N",
    "status" : "Active",
    "effDate" : ISODate("2012-08-24T01:46:33.000Z"),
    "departments" : [ 
        {
            "subDeptCd" : "AB",
            "languageCd" : "en",
            "desc" : "Development Group",
            "subDeptName" : "Java",
            "status" : "Active"
        }, 
        {
            "subDivisionAlpha2Cd" : "KG",
            "subDivisionCd" : "B",
            "languageCd" : "ru",
            "desc" : "Testing Group",
            "subDeptName" : "Python",
            "status" : "Active"
        }, 
        ..........
        ..........
        ..........
        ..........
    }
}

2 个答案:

答案 0 :(得分:1)

db.getCollection('users').find({"departments.subDeptName" : "Java"})

将所有用户与子部门java匹配。

获得所需结果的最简单方法是:

 db.getCollection('users').aggregate([
           {
             $unwind: "$departments"
           },
           { 
             $match: {
                "departments.subDeptName" : "Java"
           }
 ])

现在,您还可以添加$ project阶段以仅获取所需的特定字段。

答案 1 :(得分:-1)

尝试一下:-

db.getCollection('users').find({"departments.subDeptName" : "Java"})

我已经在命令行上检查了此工作正常。 请检查您的mongo版本和mongo shell版本

mongod --version(检查mongo版本)

mongo --version //检查mongo shell版本。

还要检查错误日志中是否还有其他问题。