2016-10-13 6 views
0

Ich möchte das passende Objekt aus einer Reihe von Objekten in Mungo/Mongodb zurückgeben, aber ich kann nicht scheinen, es richtig zu machen.Zurück Kind des Objekt-Array in Mungo

Mein Schema sieht derzeit wie folgt aus:

items: { 
    left: { type: Number, default: 0 }, 
    total: { type: Number, default: 0 }, 
    each: [{ 
     name: String 
    }] 
} 

Dieses jedes Objekt innerhalb each machen ihre eigenen Objekt-ID zu erhalten. Jetzt versuche ich dies mit Mungo abzufragen, ich habe sowohl $in und als auch eine einfache .find({ items.each._id: req.params.id }) ausprobiert.

Speziellere

Project.findOne({ 'items.each': { $elemMatch: { _id: req.params.id } } }).exec() 

Ich möchte ein Objekt wie folgt zurück:

{ 
    _id: ObjectId(23426456234), 
    name: "My name is" 
} 

Aber warum kann ich das bekommen?

+0

Haben Sie überprüft, ob 're q.params.id' ist eine Objekt-ID oder eine Zeichenfolge? Und bist du sicher, dass die 'each'-Objekte korrekt in der Datenbank gespeichert werden? – andresk

Antwort

0

Verwendung:

db.getCollection('projects').findOne({"items.each._id" : 
ObjectId("57ffc4396270adff8b273f72")},{"items.each.$":1}) 

Ausgang:

{ 
    "_id" : ObjectId("57ffc4396270adff8b273f71"), 
    "items" : { 
     "each" : [ 
      { 
       "name" : "sdfsd", 
       "_id" : ObjectId("57ffc4396270adff8b273f72") 
      } 
     ] 
    } 
} 

OR:

db.getCollection('projects').aggregate(
{$unwind: "$items.each"}, 
{$match:{"items.each._id" : ObjectId("57ffc4396270adff8b273f72")}}, 
{$project:{_id: 0, each: "$items.each"}} 
) 

Ausgang:

{ 
    "each" : { 
     "name" : "sdfsd", 
     "_id" : ObjectId("57ffc4396270adff8b273f72") 
    } 
}