#mongodb
#mongodb
Вопрос:
Я сталкиваюсь с трудностями при создании предложения поиска, чтобы получить только ключи и значения, а не весь документ. Документ выглядит следующим образом. Я пытаюсь получить ТОЛЬКО имя и код на основе критериев кода. Пример: когда я размещаю что-то вроде {"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:
Я считаю, что используя фреймворк агрегации, вы можете подобраться довольно близко:
Команда агрегирования с использованием ваших выборочных данных:
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/