我如何使用 Spring 更新 MongoDB 中的数组?
How may I update an array that's in a MongoDB using Spring?
我正在尝试根据从 Thymeleaf 支持的页面获得的一些信息来更新数据库信息。基本上每个页面都是使用 MongoDB 中的单个文档构建的。现在我想允许一些用户更改此页面,因为实际页面并不那么复杂,我正在尝试这个 JavaScript 插件,它会创建文本区域 div 并通过 [= 将它们发送到服务器30=](http://www.dyve.net/jquery/?editable)。
由于文档只有唯一字段,我可以将 html 中的字段 ID 设置为 mongodb 字段的名称,例如产品描述。我可以发送 id,更新非常简单:
public boolean updateValueWithKey(String id, String k, String v) {
Criteria c = Criteria.where(id).is(id);
Query q = new Query().addCriteria(c);
Update u = u.set(k, v);
WriteResult w = operations.updateFirst(q, u, clazz);
return w.wasAcknowledged();
}
其中id是文档id码,k是字段名(键),v是值。
但我意识到文档的一个特定部分有一个数组,但我不明白如何更新数组的特定字段。
更新 class 有一个名为 PushOperatorBuilder 的内部 class 和一个名为 atPosition 的方法,文档提到:"Forces values to be added at the given {@literal position}."
但我真的不明白如何使用它,任何从实例化的 Update 对象访问该方法的尝试都会给我错误。
帮忙?
您可以尝试 postional operator 在查询中定位数组字段,然后在该位置进行更新。
类似
Criteria c = Criteria.where(id).is(id).and("array.key").is("oldvalue");
Query q = new Query().addCriteria(c);
Update u = new Update().set("array.$.key", "newvalue");
WriteResult w = mongoOperations.updateFirst(q, u, clazz);
更新时间为 specific position
Criteria c = Criteria.where(id).is(id);
Query q = new Query().addCriteria(c);
Update u = new Update().push("arrayname").atPosition(position).each(newvalue);
WriteResult w = mongoOperations.updateFirst(q, u, clazz);
我正在尝试根据从 Thymeleaf 支持的页面获得的一些信息来更新数据库信息。基本上每个页面都是使用 MongoDB 中的单个文档构建的。现在我想允许一些用户更改此页面,因为实际页面并不那么复杂,我正在尝试这个 JavaScript 插件,它会创建文本区域 div 并通过 [= 将它们发送到服务器30=](http://www.dyve.net/jquery/?editable)。
由于文档只有唯一字段,我可以将 html 中的字段 ID 设置为 mongodb 字段的名称,例如产品描述。我可以发送 id,更新非常简单:
public boolean updateValueWithKey(String id, String k, String v) {
Criteria c = Criteria.where(id).is(id);
Query q = new Query().addCriteria(c);
Update u = u.set(k, v);
WriteResult w = operations.updateFirst(q, u, clazz);
return w.wasAcknowledged();
}
其中id是文档id码,k是字段名(键),v是值。
但我意识到文档的一个特定部分有一个数组,但我不明白如何更新数组的特定字段。
更新 class 有一个名为 PushOperatorBuilder 的内部 class 和一个名为 atPosition 的方法,文档提到:"Forces values to be added at the given {@literal position}."
但我真的不明白如何使用它,任何从实例化的 Update 对象访问该方法的尝试都会给我错误。
帮忙?
您可以尝试 postional operator 在查询中定位数组字段,然后在该位置进行更新。
类似
Criteria c = Criteria.where(id).is(id).and("array.key").is("oldvalue");
Query q = new Query().addCriteria(c);
Update u = new Update().set("array.$.key", "newvalue");
WriteResult w = mongoOperations.updateFirst(q, u, clazz);
更新时间为 specific position
Criteria c = Criteria.where(id).is(id);
Query q = new Query().addCriteria(c);
Update u = new Update().push("arrayname").atPosition(position).each(newvalue);
WriteResult w = mongoOperations.updateFirst(q, u, clazz);