【发布时间】: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”上的唯一索引。
-
如果您尝试选择性地仅插入某些字段,则不能。您需要将其作为两个查询来执行,或者将其构建到您的业务逻辑中。
标签: mongodb constraints check-constraints subdocument