2017-02-22 4 views
0

Ich habe ein Dokument mit mongo findOne() zurückgegeben. In diesem Dokument (mit einer Standort-ID von 2) haben wir ein Array von Elementen. Inside Elemente sind Nicenames. Momentan gibt dies alle Elemente zurück und nicht nur das, wo nicename eine Übereinstimmung hat. Vielen Dank!Mongo findOne innerhalb von Array

Menu.findOne({location:'2', 'items.nicename':req.params.whatever}).exec() 
 
    .then(function(item) { 
 
     res.render('pages/menuitem', {'item':item}); 
 
    }).catch(function(err) { 
 
     console.log(err); 
 
    });

Antwort

3

Mongo finden/FindOne/Aggregat liefert das gesamte Dokument, einschließlich der Unterlagen, wenn der Parameter eine Übereinstimmung getroffen. Also musst du Mongo sagen, hey, dass du mein Dokument gefunden hast, ich möchte wirklich nur diese Teile. Das ist, wo eine „Projektion“ kommt in.

Menu.findOne({location:'2'},{'items':{$elemMatch: {'nicename': req.params.whatever}) 

Die Sache über Projektionen ist, wenn Sie ein Start bauen Sie sagen, müssen alle Tasten mongo zurückgegeben werden sollen. Zum Beispiel weiß, dass ich Ihre Struktur „Ort“ in sich hat, so, wenn Sie Standort wollen auch zurück Sie folgende

Menu.findOne({location:'2'},{ 
    'location':1, 
    'items':{$elemMatch: {'nicename': req.params.whatever} 
}) 

tun müssen, wenn Sie beide Parameter im FindOne müssen Sie die folgende

Menu.findOne({location:'2','items.nicename':req.params.whatever},{ 
    'location':1, 
    'items':{$elemMatch: {'nicename': req.params.whatever} 
}) 
+0

Das ist die Lösung, danke! $ elemMatch war die Lösung – webwrks

Verwandte Themen