Mongoose查询从结果中排除值

时间:2015-01-08 05:10:00

标签: node.js mongodb mongoose mongodb-query

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

由于

2 个答案:

答案 0 :(得分:2)

为您的查询链添加初始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来电使其读起来就像两个人在一起被“删除”,但他们实际上已经被“和”了。

答案 1 :(得分:0)

你想要的只是 $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等动态语言中操作。