我想确定我的数据是否在 MongoDB 中成功持久化。由于在某些情况下 MongoDB 采用 fire_and_forget 策略,我想在驱动程序级别指定 Write Concern {w : most, j : 1},在我的情况下是 Mongoid。
用例:
我想确保我的用户有唯一的“昵称”并且不能注册违反唯一性。
我已经在“昵称”字段上创建了唯一索引。
我想确定我的数据是否在 MongoDB 中成功持久化。由于在某些情况下 MongoDB 采用 fire_and_forget 策略,我想在驱动程序级别指定 Write Concern {w : most, j : 1},在我的情况下是 Mongoid。
用例:
我想确保我的用户有唯一的“昵称”并且不能注册违反唯一性。
我已经在“昵称”字段上创建了唯一索引。
对于副本集,您可以使用以下配置,如http://mongoid.org/en/mongoid/docs/installation.html#replica所述:
consistency: :strong
除此之外,您还需要开启安全模式,如http://mongoid.org/en/mongoid/docs/tips.html#safe_mode中所述:
safe: true
看起来你不能w
像这样设置 MongoDB 的参数,但你可以在 Band 文档操作上设置它——虽然这将是每个查询:
Band.with(safe: { w: 3 })
您也可以通过以下方式在每个会话中执行此操作:
Band.mongo_session.with(safe: { w: 3 }) do |session|
session[:artists].find(...)
end
简短的回答:你不能。
长答案:
考虑使用多个数据存储选项。人们经常在没有必要的时候加入 NoSQL 的潮流。如果您需要保证写入,您应该使用关系数据库,或者考虑使用 orientDB 等混合数据库。缺乏有保证的写入是 MongoDB 等解决方案能够很好扩展的重要原因之一。