我很难创建一个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"
}
]
}
答案 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/