Nur das abgefragte Element in einem Objektarray in der MongoDB-Sammlung abrufen

Angenommen, Sie haben die folgenden Dokumente in meiner Sammlung:

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

Do Abfrage:

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

Ode

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

Gleiches Dokument zurückgeben (Dokument 1), aber immer mit ALLEN Array-Elementen inshapes:

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

Ich möchte jedoch das Dokument erhalten (Dokument 1) nur mit dem Array, das @ enthäcolor=red:

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

Wie kann ich das machen

Antworten auf die Frage(22)

Ihre Antwort auf die Frage