Получить только запрошенный элемент в массиве объектов в коллекции MongoDB - PullRequest
335 голосов
/ 21 октября 2010

Предположим, у вас есть следующие документы в моей коллекции:

{  
   "_id":ObjectId("562e7c594c12942f08fe4192"),
   "shapes":[  
      {  
         "shape":"square",
         "color":"blue"
      },
      {  
         "shape":"circle",
         "color":"red"
      }
   ]
},
{  
   "_id":ObjectId("562e7c594c12942f08fe4193"),
   "shapes":[  
      {  
         "shape":"square",
         "color":"black"
      },
      {  
         "shape":"circle",
         "color":"green"
      }
   ]
}

Сделать запрос:

db.test.find({"shapes.color": "red"}, {"shapes.color": 1})

Или

db.test.find({shapes: {"$elemMatch": {color: "red"}}}, {"shapes.color": 1})

Возвращает совпавший документ (Документ 1) , но всегда со всеми элементами массива в shapes:

{ "shapes": 
  [
    {"shape": "square", "color": "blue"},
    {"shape": "circle", "color": "red"}
  ] 
}

Однако я хотел бы получить документ (Документ 1) только с массивом, который содержит color=red:

{ "shapes": 
  [
    {"shape": "circle", "color": "red"}
  ] 
}

Как я могу это сделать?

Ответы [ 11 ]

0 голосов
/ 25 октября 2018
db.test.find( {"shapes.color": "red"}, {_id: 0})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...