我正在尝试更新不同学校的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进程。