Найдите значение внутри документа

#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/