返回文档的一部分使用$或在mongoosemongodb

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; }); 

上述查询提取任何用户的电子邮件或名称符合search条件。 然而,正如所料,它返回的用户发现的整个文档..

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选项结合起来,还是将后处理的唯一选项?

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

 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