猫鼬承诺在更新集合并保存对象时发出警告

时间:2018-10-15 13:28:15

标签: javascript node.js mongodb mongoose

我正在尝试更新不同学校的School集合,并将新的personid推送到集合的数组中。我不断收到一条错误消息,指出两个ID相同。但是,它们是数组的一部分,而不是文档的_id。在学校内保存多个人时失败。

我看到的是特定的School doc被完全删除,并且在一个文档中创建了两个新的id,其中仅包含两个personid的数组。 这个人看起来像这样:

{
 "_id" : ObjectId("5bc4911536597f51522ab0a4"),
 "name" : "Max",
 "schoolid" : ObjectId("5bc4911536597f51522ab0a3"),
 "__v" : 0
}

我想让学校看起来像这样:

{
 "_id" : ObjectId("5bc4911536597f51522ab0a3"),
 "people" : [ 
     ObjectId("5bc4911536597f51522ab0a9"),
     ObjectId("5bc4911536597f51522ab0a4"), -> Max ^
     ObjectId("5bc4911536597f51522ab0a2")
 ],
 "schoolname" : "De manenschijn",
 "city" : "",
 "street" : "",
 "streetnumber" : "",
 "zipcode" : "",
 "__v" : 0
}

查询如下:

School.findByIdAndUpdate(schoolid,
  { "$push": { "people": personid}},
  { "upsert": true, "new": true })
  .exec(person.save());

学校现在看起来像这样,查询失败:

{
 "_id" : ObjectId("5bc4911536597f51522ab0a3"),
 "__v" : 0,
 "people" : [ 
     ObjectId("5bc4911536597f51522ab0a2") -> different from Max
 ]
}

我的学校看起来像这样:

const schoolSchema = new mongoose.Schema({
 schoolname : String,
 city : String,
 street : String,
 streetnumber : String,
 zipcode : String,
 people : [{ type: Schema.Types.ObjectId, ref: 'Person' }]
}, { timestamps: true });

我的人是这样的:

const personSchema = new mongoose.Schema({
 name : String,
 schoolid : { type: Schema.Types.ObjectId, ref: 'School' },
}, { timestamps: true });

我还发现查询以相同的ID执行了两次,因此可能会导致出现错误消息,但仍然是,学校文档在第一次更新后被完全删除了。

蒙哥的错误消息:

(节点:86353)UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝ID:1):MongoError:E11000重复键错误集合:DB.schools索引: id dup键:{:ObjectId('5bc4911536597f51522ab0ad ')}

[0](节点:86353)[DEP0018] DeprecationWarning:已弃用未处理的承诺拒绝。将来,未处理的承诺拒绝将以非零退出代码终止Node.js进程。

0 个答案:

没有答案