2016-12-14 82 views
0

我有一個模型,看起來像這樣:貓鼬重複申報

var conversationsSchema = new mongoose.Schema({ 
    start_date: Date, 
    users: [{ 
     user_id: mongoose.Schema.ObjectId, 
     socket_id: String 
    }] 
}); 

我想找到兩個用戶,所以我使用下面的代碼之間的對話。

Conversation.findOne({ 
      'users.user_id': {$in: thisUsers.user_id}, 
      'users.user_id': {$in: thisPartner.user_id} 
}); 

此作品發現。但是,它看起來不正確,並且像這樣做有更好的方法。我的編輯還說'重複申報'。

有沒有更好的方法來做到這一點?

+0

你可以嘗試Conversation.findOne({ 'users.user_id': {$ in:thisUsers.user_id,thisPartner.user_id}}); ? – Veeram

+0

該語法扔和錯誤,所以我試圖把項目放在一個數組,如:'users.user_id':{$ in:[thisUsers.user_id,thisPartner.user_id]}。然後,我在對話中更改了其中一個用戶的ID,但仍然找到一個,即使其中一個錯誤,但另一個是正確的。 – Tom

+0

您是否需要查找包含用戶標識和合作夥伴標識的行?如果是,那麼你需要所有的操作員。你可以試試Conversation.findOne({'users.user_id':{$ all:[thisUsers.user_id,thisPartner.user_id]}}); ? – Veeram

回答

0

重複的de 'duplicate declaration'是由於在查詢對象中使用了兩次相同的密鑰('users.user_id')(以前的值被丟棄)。

您可以使用$in Operator to Match Values

Conversation.findOne({ 
    $and: [ 
    {'users.user_id': {$in: [ thisUsers.user_id ]}}, 
    {'users.user_id': {$in: [ thisPartner.user_id ]}} 
    ] 
}); 

或者乾脆:

Conversation.findOne({ 
    $and: [ 
    {'users.user_id': thisUsers.user_id}, 
    {'users.user_id': thisPartner.user_id} 
    ] 
}); 

或更好$all

Conversation.findOne({ 
    'users.user_id': {$all: [ thisUsers.user_id, thisPartner.user_id ]} 
});