我读到:.save检查是否存在与您保存的_id相同的_id的文档。 如果存在,它将替换。如果没有这样的文档,它将作为新文档插入。
但是当我这样做时:
barTable = new barModel(received.bar);
return resolve(barTable.save());
它与新记录配合使用很好,但是在保存现有记录时出现此错误:
{
"err": true,
"errMsg": "Error while barEdit: MongoError: E11000 duplicate key error collection: pattayanight.bar index: _id_ dup key: { : \"aa11\" }"
}
它为什么不像文档中所说的那样更新?
这是我的模特
var Schema = mongoose.Schema;
var barSchema = new Schema({
_id: String,
type: String,
area: String,
shortText: String
}, { versionKey: false });
module.exports = mongoose.model('barModel', barSchema,'bar');
为什么我总是可以将findOneAndUpdate与upsert:true一起使用,但是.save为什么不更新现有记录?
答案 0 :(得分:0)
看看这个答案,它可能会给你带来一些启发(评论也很有趣):
主要区别在于,使用.save()时,客户端代码中已经有一个对象,或者必须先从服务器检索数据,然后再写回整个内容。
另一方面,.update()不需要将数据从服务器加载到客户端。所有的交互都是在服务器端进行的,而无需检索到客户端。因此,在向现有文档中添加内容时,.update()可以非常有效。
此外,.update()有一个多重参数,该参数允许对多个符合查询条件的文档执行操作。
使用.update()进行调用时,便利方法中有些东西会松动,但是某些操作的好处是您必须承担“权衡”。有关此信息和可用选项的更多信息,请参阅文档。
简而言之,.save()是客户端接口,.update()是服务器端。