- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 MongoDB
图集中发布数据时出现错误。
const express = require('express');
const router = express.Router();
const Persons = require('./PersonsSchema');
router.post('/',async(req,res)=>{
console.log(req.body.Name);
console.log(req.body.Age);
try{
const postPerson = await new Persons({
Name : req.body.Name,
Age : req.body.Age
})
const savePersons = await postPerson.save();
res.status(200).json(savePersons)
}
catch(err){
res.json({"err": err})
}
});
module.exports = router;
And above mentioned is routed File.
My data is posted in the atlas. But I am getting an error of UnknownReplWriteConcern in postman while Posting a data.
我的架构
看起来像
const mongoose = require('mongoose');
const PersonSchema = new mongoose.Schema({ name: String },{ age: String }, {
writeConcern: {
w: 'majority',
j: true,
wtimeout: 1000
}
});
module.exports = mongoose.model('Persons',PersonSchema);
最佳答案
昨天我遇到了这个问题,我搜索了答案并找到了你的问题。最近我找到了解决方案并且它在我的代码中有效,所以我决定与您分享。因此,如果遇到同样问题的人将通过此答案得到正确的解决方案。
在我们找到答案之前,让我们先了解一下写关注发生了什么。
早在 2012 年的 MongoDB 2.2 中,MongoDB 中的默认写入关注点就一直是 w:1
。
您可以使用三种不同的设置在当前 MongoDB 版本(版本 3.2.6 及更高版本)中设置写入关注:
w
设置:在声明写入成功之前应有多少 Node 确认写入。默认值为 1,表示主 Node 的确认就足够了。j
设置:在确认之前是否必须记录写入?默认值取决于 writeConcernMajorityJournalDefault
。w:majority
写入关注设置而不设置 j
,则隐含的 j
值是多少?默认值为true
(写入应在被确认之前记录在大多数投票 Node 中)。还有一个wtimeout
setting配置 MongoDB 在通知客户端写入尚未被确认之前应等待写入关注得到满足的时间。否则,等待写入关注得到满足的写入可以永远等待而不是失败。
这里的特殊设置是w:majority
。这意味着写入必须传播到副本集中的大多数投票 Node (以及它们的日志)才能得到确认。这可以说是最安全的设置,同时提供良好的性能,因为:
正如你所想象的,投票 Node 确实包括仲裁者。因此,在具有主从仲裁器设置的副本集中,w:majority
可能会在以下情况下失败:
w:1
进行写入将照常成功,但这些写入可能会回滚(因为它没有写入大多数投票数据承载 Node )。w:majority
写入将失败(或无限期等待),因为仲裁器被计为投票 Node 。因此,如果您计划在应用程序中使用 w:majority
,则不建议使用仲裁器。
请注意,也不建议在分片集群中形成分片的 3 Node 副本集中使用仲裁器,因为 block 移动需要 w:majority
。一个分片中的数据承载 Node 发生故障将对 block 迁移操作产生不利影响。
这是对写关注发生的情况的基本解释,要修复您遇到的错误,您只需从架构中删除 w: 'majority'
即可。
像这样
const PersonSchema = new mongoose.Schema({ name: String },{ age: String }, {
writeConcern: {
j: true,
wtimeout: 1000
}
});
此设置修复了我的 UnknownReplWriteConcern
错误,并且效果非常好。所以希望它也能帮助你。
关于node.js - 使用 Node js(express) 在 mongodb atlas 中发布时出现 UnknownReplWriteConcern 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61525058/
我是一名优秀的程序员,十分优秀!