在文档中查找值

时间:2014-06-18 17:06:52

标签: mongodb

我很难创建一个Find语句来为我提供键和值 - 而不是整个文档。该文件看起来像这样。我正在尝试根据代码标准检索名称和代码。示例:当我放置{"code" : { $in : ["js" , "dns"}} , {"name"}}之类的内容时 我想收到类似的东西......

[
{
        "code" : "js",
        "name" : "Java Script",
        "skillType" : "programming"
    },
    {
        "code" : "dns",
        "name" : "DNS",
        "skillType" : "networking"
    }
]

我的意思是:一个数组只包含部分文档,而不是整个文档 - 并且符合我的标准。在这个基本需求中使用find的正确方法是什么?

以下是整个文件:

{
"_id" : ObjectId("53a1c40c9b97ebe1e5ad659e"),
"type" : "SkillSets",
"skillSet" : [ 
    {
        "code" : "js",
        "name" : "Java Script",
        "skillType" : "programming"
    }, 
    {
        "code" : "mong",
        "name" : "MongoDB",
        "skillType" : "database"
    }, 
    {
        "code" : "dns",
        "name" : "DNS",
        "skillType" : "networking"
    }
]
}

1 个答案:

答案 0 :(得分:0)

我相信使用聚合框架可以非常接近:

聚合命令,使用您的示例数据:

db.collectionname.aggregate([
                             {$unwind:"$skillSet"},
                             {$match:{"skillSet.code":{$in:["dns","js"]}}}, 
                             {$project:{skillSet:1, _id:0}}, 
                             {$group: { _id: null, skill: { $push: "$$ROOT" } }}
                            ])

结果:

{
  "_id" : null, 
  "skill" : [ 
             {"skillSet" : { "code" : "js", "name" : "Java Script", "skillType" : "programming" } }, 
             {"skillSet" : { "code" : "dns", "name" : "DNS", "skillType" : "networking" } } 
            ] 
}

您希望对完整数据集进行一些实验,以获得所需的确切结果。有关聚合框架的更多信息:

http://docs.mongodb.org/manual/core/aggregation-introduction/