我的模型看起来像这样:
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 :(得分: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 ]}
});