【问题标题】:Mongoose query to exclude a value from the resultMongoose 查询从结果中排除一个值
【发布时间】:2015-03-06 04:01:33
【问题描述】:

我想检索一个用户列表,但不包括当前用户 ID。

现在我没有排除它:

User.find()
  .or([
     {email: new RegExp(req.param('searchTerm'), 'i')}, 
     {displayName: new RegExp(req.param('searchTerm'), 'i')}
   ],
'displayName email profileImageURL')
  .limit(20)
  .exec(function(err, users)

如何更改查询以使用 AND 我需要排除当前用户 ID?

谢谢

【问题讨论】:

    标签: node.js mongodb mongoose mongodb-query


    【解决方案1】:

    为此向您的查询链添加初始 where 调用:

    User.find()
      .where('_id').ne(userID)
      .or([
         {email: new RegExp(req.param('searchTerm'), 'i')}, 
         {displayName: new RegExp(req.param('searchTerm'), 'i')}
       ])
      .select('displayName email profileImageURL')
      .limit(20)
      .exec(function(err, users)
    

    or 调用使它看起来像两者是 OR'ed 在一起,但它们实际上是 AND'ed。

    【讨论】:

      【解决方案2】:

      您只需要 $ne_id 对抗的另一个条件。这可以通过多种方式表示:

      要么:

      User.find().where({ "_id": { "$ne": currentId })
        .or([
           {email: new RegExp(req.param('searchTerm'), 'i')}, 
           {displayName: new RegExp(req.param('searchTerm'), 'i')}
         ]).
        .select('displayName email profileImageURL')
        .limit(20)
        .exec(function(err, users) {
      
        });
      

      或者:

      User.find({ "_id": { "$ne": currentId })
        .or([
           {email: new RegExp(req.param('searchTerm'), 'i')}, 
           {displayName: new RegExp(req.param('searchTerm'), 'i')}
         ])
        .select('displayName email profileImageURL')
        .limit(20)
        .exec(function(err, users)
      

      或者甚至只是作为原生数据结构。毕竟是 JavaScript:

      User.find(
          {
              "_id": { "$ne": currentId },
              "$or": [
                  { "email": new RegExp(req.param('searchTerm'), 'i')}, 
                  { "displayName": new RegExp(req.param('searchTerm'), 'i')}
              ],
          },
         'displayName email profileImageURL')
         .limit(20)
         .exec(function(err, users) {
      
         });
      

      因此您不需要“帮助器”方法,这也会导致代码更长且更不灵活。数据结构在 JavaScript 等动态语言中很容易操作。

      【讨论】:

        猜你喜欢
        • 2017-03-23
        • 1970-01-01
        • 2014-02-21
        • 2021-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多