使用$或mongoose mongodb返回doc的部分内容

时间:2015-05-31 18:55:03

标签: node.js mongodb

User.find({
        $or:[
            {'userSetData.name': { $regex: new RegExp( searchTerm ,'i') }},
            {'local.email': { $regex: new RegExp( searchTerm ,'i') }},
            {'google.name': { $regex: new RegExp( searchTerm ,'i') }},
            {'google.email': { $regex: new RegExp( searchTerm ,'i') }},
            {'facebook.name': { $regex: new RegExp( searchTerm ,'i') }},
            {'facebook.email': { $regex: new RegExp( searchTerm ,'i') }}
        ]
    }, function(err, doc) {
        if( err ){
            console.log( err );
        }
        return doc;
    });

上述查询会提取其电子邮件或名称与搜索条件匹配的任何用户。但是正如预期的那样,它会返回找到的用户的整个文档。

http://docs.mongodb.org/manual/tutorial/project-fields-from-query-results/ 在mongodb网站上,他们演示使用projection来限制返回的文档的字段,例如:

db.inventory.find( { type: 'food' }, { item: 1, qty: 1, _id:0 } )

是否可以将$或mongoose与mongo的projection选项结合使用,还是后处理唯一的选项?

1 个答案:

答案 0 :(得分:2)

您应该能够将另一个对象传递给您的查找并使用投影

User.find({
    $or:[
        {'userSetData.name': { $regex: new RegExp( searchTerm ,'i')    
    }},
        {'local.email': { $regex: new RegExp( searchTerm ,'i') }},
        {'google.name': { $regex: new RegExp( searchTerm ,'i') }},
        {'google.email': { $regex: new RegExp( searchTerm ,'i') }},
        {'facebook.name': { $regex: new RegExp( searchTerm ,'i') }},
        {'facebook.email': { $regex: new RegExp( searchTerm ,'i') }}
    ]
}, {<projection goes here>},
 function(err, doc) {
    if( err ){
        console.log( err );
    }
    return doc;
});

来源http://mongoosejs.com/docs/api.html#model_Model.find