在 mongoose mongodb 中使用 $or 返回文档的一部分

Posted

技术标签:

【中文标题】在 mongoose mongodb 中使用 $or 返回文档的一部分【英文标题】:return part of the doc using $or in mongoose mongodb 【发布时间】:2015-08-14 04:44:01 【问题描述】:
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 的 $or 与 mongo 的 projection 选项结合使用,或者后处理是否是唯一的选项?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

我也为第一次玩 mongo 的人找到了这个:***.com/questions/12096262/…

以上是关于在 mongoose mongodb 中使用 $or 返回文档的一部分的主要内容,如果未能解决你的问题,请参考以下文章

使用 mongoose 在 mongodb 中保存多个字段数组

如何使用 Mongoose 在 MongoDB 中插入 JSON 数组

如何在 typescript 中使用 mongoose 在 mongodb 中插入数据?

使用 Mongoose 在 MongoDB 中更新许多记录的正确方法是啥

在多个文件中使用 Mongoose 连接到 MongoDB

我无法使用 Mongoose 在 MongoDB 中保存或查找文档