Mongoose重复声明

时间:2016-12-14 13:25:57

标签: node.js mongodb mongoose

我的模型看起来像这样:

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}
});

这可以找到。但是,它看起来是错误的,并且有更好的方法来做到这一点。我的编辑也说“重复声明”。

有更好的方法吗?

1 个答案:

答案 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 ]}
});