猫鼬查询从结果中排除一个值

Mongoose query to exclude a value from the result

我想检索用户列表但不包括当前用户 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?

谢谢

为此向您的查询链添加初始 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 调用使它读起来好像两者是“或”运算,但实际上是“与”运算。

您想要的只是 $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) {

   });

因此您不需要 "helper" 方法,这也会导致代码更长且灵活性更低。数据结构很容易用 JavaScript 等动态语言进行操作。