????????? MongoDb ??????“???”???

Posted

技术标签:

【中文标题】是否可以在创建时在 MongoDb 子文档中创建“不修改”约束?【英文标题】:Is it possible to make a "not modify " constrain on MongoDb subdocuments at creation? 【发布时间】:2013-12-05 19:44:30 【问题描述】:

我想修复 MondoDb 文档中的特定子文档值,因此无法在下次更新或任何其他可以修改文档的 MongoDb 操作时对其进行修改。 例如,如果插入像下面这样的文档,我会喜欢“eyesColor”值不能更改。 "id" : "someId", “姓名”:“简”, "eyesColor" : "蓝色" 可能的更新是: "id" : "someId", “姓名”:“艾米”, "eyesColor" : "绿色" 更新后我需要的结果是: "id" : "someId", “姓名”:“艾米”, "eyesColor" : "蓝色" 我想这样做是因为我正在创建的项目中不存在使用 $set 和 $unset 运算符的可能性。在更新之前读取现有文档以获取子文档的值(“eyesColor”)会降低我正在处理的应用程序的性能。

实际上我需要的约束类似于集合上的固定大小(封顶集合)。不同之处在于它在子文档而不是集合上,在子文档中包含的值而不是大小上。

这种类型的约束有什么解决方案吗?

【问题讨论】:

这是功课吗?你试过什么updates?您可以指定条件。 @WiredPrairie 不,是一个课外项目。我使用了 DbCollection.update(DBObject q , DBObject o , boolean upsert , boolean multi) 和 upsert 和 multi on 'false'。谢谢 您尝试过哪些限制条件? 唯一使用的约束是“id”上的唯一索引。 如果您尝试选择性地仅插入某些字段,则不能。您需要将其作为两个查询来执行,或者将其构建到您的业务逻辑中。 【参考方案1】:

MongoDB 中没有约束(唯一的例外:唯一索引)。无法在数据库层将字段设为“只读”。

如果您想使用 upsert(db.collection.updateupsert: true)在插入新文档时添加某些字段但在更新现有文档时不影响这些字段,您可以将这些字段放在 $setOnInsert-operator 后面。

【讨论】:

以上是关于????????? MongoDb ??????“???”???的主要内容,如果未能解决你的问题,请参考以下文章

win7 安装mongodb 怎么创建mongodb.log

MongoDB——MongoDB安装+增删改查操作

MongoDB——MongoDB安装+增删改查操作

window怎么安装mongodb

java怎么导出mongodb数据

如何配置mongodb 3.0.3