2015-01-08 78 views
0

我想檢索用戶列表,但排除當前用戶標識。貓鼬查詢從結果中排除值

現在我有它不排斥:

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) 

如何更改查詢中使用的,我需要排除當前用戶ID?

感謝

回答

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調用使得它讀起來就像兩個都或運算在一起,但它們實際上是AND後。

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等動態語言中操作。