2017-02-22 57 views
0

我有一個文件與mongo的findOne()返回。在該文檔中(位置標識爲2),我們有項目數組。內部項目是nicenames。目前,這將返回所有項目,而不僅僅是nicename匹配的項目。謝謝!Mongo findOne 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); 
 
    });

回答

3

蒙戈查找/ findOne /骨料返回整個文檔,包括子文件,當你打的參數匹配。所以你需要告訴Mongo,嘿,現在你發現我的文檔我真的只想要這些部分。這就是一個「投影」進來。

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

關於預測的事情是,一旦你開始建立一個你需要告訴蒙戈所有你想要返回鍵。例如,我知道你的結構有,所以如果你想要的位置返回,以及你需要做以下

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

如果您需要在findOne兩個參數在它的「位置」做以下

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

這是解決方案謝謝! $ elemMatch是修復 – webwrks