我有一个与mongo的findOne()一起返回的文档。在该文档内(位置ID为2),我们有items数组。内部项目是nicenames。目前,这将返回所有项目,而不仅仅是nicename匹配的项目。谢谢!
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);
});

答案 0 :(得分:3)
Mongo find / findOne / aggregate会在您的参数匹配时返回整个文档,包括子文档。所以你需要告诉Mongo,嘿,现在你发现了我的文件我真的只想要这些部分。这就是“投射”的来源。
Menu.findOne({location:'2'},{'items':{$elemMatch: {'nicename': req.params.whatever})
关于投影的事情是,一旦你开始构建一个你需要告诉mongo你想要返回的所有键。例如,我知道您的结构中有“位置”,因此如果您想要返回位置,则需要执行以下操作
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}
})