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
选项结合使用,还是后处理唯一的选项?
答案 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;
});