MongoError:无法推断要设置的查询字段,路径'users'匹配两次



我使用猫鼬。我想创建一个文档chat与数组users(包括userId1, userId2),如果我找不到它:

我是这样做的:

ChatModel.findOneAndUpdate(
  { users: { $all: [userId1, userId2] }},
  { $setOnInsert: {
    users: [userId1, userId2]
  }},
  { upsert: true })
  .exec()
  .catch(err => console.log(err));

但是我得到了错误:

MongoError:无法推断要设置的查询字段,路径'users'匹配两次

这是Chat Schema:

{
  users: [{ type: Schema.Types.ObjectId, ref: 'User' }],
  createdAt: { type: Date, default: Date.now }
}

我怎样才能做得正确?由于

我用这个作为条件

{
  "users": {
        $all: [
          {"$elemMatch": userId1},
          {"$elemMatch": userId2}
        ]
  }......
}

我知道这个问题已经有答案了,但是为了节省别人的时间,我不得不这样做:

{
  "users": {
        $all: [
          { $elemMatch: { $eq: mongoose.Types.ObjectId(userId1) }},
          { $elemMatch: { $eq: mongoose.Types.ObjectId(userId2) }}
        ]
  }......
}

对接受答案的修改:

    就像Dave Howson在他对被接受的答案的评论中所说的那样,$eq是需要的。
  • mongoose.Types。ObjectId是需要的,因为我猜我的模式实例上的_id属性是一个字符串。

这个问题有一个解决方法:

db.foo.update({a:{$all:[{$elemMatch:{$eq:0}},{$elemMatch:{$eq:1}}]}},{$set:{b:1}},{upsert:true})

a是一个同时包含0和1的数组时,它将匹配,否则它将反转。

从https://jira.mongodb.org/browse/server - 13843 - ?focusedcommentid=2305903&页面= com.atlassian.jira.plugin.system.issuetabpanels: comment-tabpanel #评论- 2305903

相关内容

最新更新