Mongo findOne在Array里面

时间:2017-02-22 23:19:36

标签: javascript mongodb express

我有一个与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);
    });




1 个答案:

答案 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}
})