我正在尝试从从百利夫(Thymeleaf)驱动的页面获得的一些信息中更新数据库信息。基本上,每个页面都是使用MongoDB的单个文档构建的。现在,我想允许某些用户更改此页面,因为实际页面并不那么复杂,所以我向这个JavaScript插件进行了镜头,该插件将创建文本区域Divs并通过Ajax发送到服务器(http://www.dyve.net/jquery/?edable)。
由于该文档只有唯一的字段,因此我可以将HTML中的字段ID设置为MongoDB字段的名称,例如product-deScription。我可以发送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值。
,但我意识到该文档的一个特定部分具有数组,但是我不明白如何更新数组的特定字段。
更新类具有一个名为PushOperatorBuilder的内部类,其方法为ATPosition,该方法docs提到:"强制要在给定{@literal位置}添加值。"
但我真的不明白如何使用它,任何尝试从实例化更新对象达到该方法的尝试都给了我错误。
帮助?
您可以尝试在查询中找到邮政运算符,以在该位置进行更新。
。 之类的东西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);
在特定位置更新
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);