如何使用 Spring 更新 MongoDB 中的数组?



我正在尝试从从百利夫(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);

最新更新