【发布时间】:2020-12-26 03:12:38
【问题描述】:
我的架构如下:
var answerSchema = new mongoose.Schema({
username: {
type: String,
unique: true,
required: true
}
)
mongoose.model("Answer", answerSchema)
在另一个文件中我有:
var Answer = mongoose.model("Answer")
router.put("/test", function (req, res){
const query = { _id: "5fe656077ddb2a4e1a91d808"}
const update = { username: 'test' }
const options = {
new: true,
upsert: true,
setDefaultsOnInsert: true
}
Answer.findOneAndUpdate(query, update, options, function(error, doc) {
if(error){
res.send(error.message)
}
else{
res.send('successfully saved.')
}
})
})
目前在 mongo shell 中,我可以运行 db.answers.find().pretty() 它给了我:
{
"_id" : ObjectId("5fe656077ddb2a4e1a91d808"),
"username" : "aaaa",
"__v" : 0
}
但是,当我使用 POSTMAN 访问“/test” URL 时,我收到错误消息“不支持可重试写入”。我知道 documentdb 不支持可重试写入,但是这个 FindOneAndUpdate 如何需要可重试写入?我还尝试将 set() 和 save() 与 findOne() 一起使用,并且 findOne() 工作正常,但 set() 会引发相同的错误。我错过了什么吗?
【问题讨论】:
-
我发现了一个类似的问题here,你的连接字符串是否包含
?retryWrites=true? -
是的,但是 documentdb 本身不支持可重试写入,所以这不起作用。为什么更新需要可重试的写入?
标签: node.js mongodb mongoose aws-documentdb