2015-02-14 2 views
3

Я пытаюсь вернуть некоторые элементы массива в документе ниже.Возвращение массива в mongodb

{ 
"_id": 2, 
"awardAmount": 6000, 
"url": "www.url.com", 
"numAwards": 3, 
"award": "Faculty Seed Research Grant", 
"Type": "faculty", 
"Applicates": [ 
    { 
     "School": "psu", 
     "Name": "tom", 
     "URL": "www.url.com", 
     "Time": "", 
     "Research": "", 
     "Budge": 7500, 
     "appId": 100, 
     "citizenship": "us", 
     "Major": "mat", 
     "preAwards": "None", 
     "Advisor": "" 
    }, 
    { 
     "School": "ffff", 
     "Name": "KEVIN", 
     "URL": "www.url.com", 
     "Time": "5/5/5-6/6/6", 
     "Research": "topology", 
     "Budge": 9850, 
     "appId": 101, 
     "citizenship": "us", 
     "Major": "gym", 
     "preAwards": "None", 
     "Advisor": "Dr. cool", 
     "Evaluators": [ 
      { 
       "abstractScore": 3, 
       "goalsObjectivesScore": 4, 
       "evalNum": 1 
      }, 
      { 
       "abstractScore": 545646, 
       "goalsObjectivesScore": 46546, 
       "evalNum": 2 
      } 
     ] 
    } 
] 
} 

Я хочу только данные «Аппликации», если у них есть поле «Оценщики». Вот что я пытался

db.coll.find({'Applicates.Evaluators':{'$exists': True }}) 

Это дает мне весь документ, но я просто хочу, данные «Applicates», которые имеют поле «оценщики» в нем, как это.

{ 
"_id": 2, 
"awardAmount": 6000, 
"url": "www.url.com", 
"numAwards": 3, 
"award": "Faculty Seed Research Grant", 
"Type": "faculty", 
"Applicates": [ 
    { 
     "School": "ffff", 
     "Name": "KEVIN", 
     "URL": "www.url.com", 
     "Time": "5/5/5-6/6/6", 
     "Research": "topology", 
     "Budge": 9850, 
     "appId": 101, 
     "citizenship": "us", 
     "Major": "gym", 
     "preAwards": "None", 
     "Advisor": "Dr. cool", 
     "Evaluators": [ 
      { 
       "abstractScore": 3, 
       "goalsObjectivesScore": 4, 
       "evalNum": 1 
      }, 
      { 
       "abstractScore": 545646, 
       "goalsObjectivesScore": 46546, 
       "evalNum": 2 
      } 
     ] 
    } 
] 
} 

ответ

3

Попробуйте это (ключ с помощью $unwind оператора)

db.coll.aggregate(
[ 
{ $match : {'Applicates.Evaluators':{'$exists': true }} }, 
{ $unwind : "$Applicates" }, 
{ $match : {'Applicates.Evaluators':{'$exists': true }} }, 
{ $group : { _id : "$_id", 
    'Applicates' : {$push : '$Applicates'} , 
    awardAmount : {$first : '$awardAmount'}, 
    url : {$first : '$url'}, 
    award : {$first : '$award'}, 
    numAwards : {$first : '$numAwards'}, 
    award : {$first : '$award'}, 
    Type : {$first : '$Type'}, 
    }}, 
]) 
Смежные вопросы