2017-09-11 3 views
0

私はThymeleaf poweredページから入手した情報からデータベース情報を更新しようとしています。基本的に各ページはMongoDBからの単一の文書を使用して構築されます。実際のページはそれほど複雑ではないので、一部のユーザーにこのページを変更させたいと思っています。このJavaScriptプラグインを使ってテキストエリアのdivを作成し、Ajax(http://www.dyve.net/jquery/?editable)経由でサーバーに送信しました。Springを使用してMongoDBにある配列を更新するにはどうすればよいですか?

ドキュメントには一意のフィールドしかないので、htmlのフィールドidをproduct-descriptionのようなmongodbフィールドの名前に設定することができます。私は経由IDを送信することができ、更新は本当に簡単です:

idはドキュメント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(); 
} 

は、kは、フィールド名(キー)とVの値です。

しかし、ドキュメントの特定の部分に配列があることに気がつきましたが、配列の特定のフィールドをどのように更新できるか分かりません。

Updateクラスには、atPositionというメソッドを持つPushOperatorBuilderという内部クラスがあります。ドキュメントには、「与えられた{@ literal position}に値を追加する」という記述があります。

しかし、私は実際にそれを使用する方法を理解していません、インスタンス化されたUpdateオブジェクトからそのメソッドに到達しようとすると、エラーが発生しました。

ヘルプ?

答えて

2

postional operatorを試して、クエリの配列フィールドの位置を特定し、その位置で更新することができます。 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); 
+0

何か

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); 

などのアップデート私はOLDVALUEを持っていない、また私はそれをしたいです。私は更新したい文字通りの位置を持っています –

+0

私の謝罪。私は答えを更新しました。確認してください。 – Veeram

+0

Welp(私の全文書を空にしたもの)xD あなたが投稿した文書を読んでチェックアウトするのにしばらく時間がかかるでしょう。あなたの答えが変わったのは、配列内に3つのフィールドがありますが、PushOperatorBuilderにはキー/値の更新オプションがないようです。 –

関連する問題