从MongoDB集合的对象数组中仅检索所需的元素

时间:2019-01-09 11:41:28

标签: arrays mongodb

我是第一次使用MongoDB。我想从MongoDB集合的对象数组中检索特定字段。我需要帮助该怎么做?

在我的数据库中,有一个称为技能的结构,它以数组的形式出现。我想分别检索 skillName experienceInMonths

{
"skills" : [
        {
            "skillName" : "sql",
            "experienceInMonths" : 2
        },
        {
            "skillName" : "java",
            "experienceInMonths" : 3
        }
    ]
}

我尝试使用$ elemMatch检索特定字段。

但是,我没有得到预期的结果。

> db.userforms.find({"emailId": "nagendra@gmail.com"},{"_id":0, "skills":1})
{ "skills" : [ { "skillName" : "sql", "experienceInMonths" : 2 }, { "skillName" : "java", "experienceInMonths" : 3 } ] }

> db.userforms.find({"emailId":"nagendra@gmail.com"},{"_id":0, "skills":{$elemMatch: {"skillName":"sql"}}})
{ "skills" : [ { "skillName" : "sql", "experienceInMonths" : 2 } ] }

我的实际结果是: {“ skills”:[{“ skillName”:“ sql”,“ experienceInMonths”:2}]}

但是所需的结果是: {“ skillName”:[“ sql”,“ java”]}

1 个答案:

答案 0 :(得分:2)

使用聚合:

db.userforms.aggregate([
  { $match: { emailId: "nagendra@gmail.com" } },
  { $project: { skillName: { $concatArrays: "$skills.skillName" } } }
])

将返回:

{ "_id" : 0, "skillName" : [ "sql", "java" ] }