3

'シーケンス'コレクションを作成しました。'name'フィールドと'counter'フィールドがあります。「name」フィールドは「Tag」に設定され、「counter」フィールドは0に設定されます。以下は、「counter」フィールドの次の値を返すメソッド内のコードです。

final Sequence tagSequence = mongoTemplate.findAndModify(
  new Query(Criteria.where("name").is("Tag")), 
  new Update().inc("counter", 1), 
  new FindAndModifyOptions().returnNew(true), Sequence.class);

ただし、このコードは機能しません。入力はありますか?

http://dev.bubblemix.net/blog/2011/04/auto-increment-for-mongodb-with-the-java-driver/でこの実装を見つけましたが、何が問題なのか知りたかったのです。このコードで。

4

1 に答える 1

4

最初にSequenceオブジェクトを「タグ」名でMongoDBに保存しておけば、コードは正しく機能します。nameフィールドに注釈を付けることをお勧めします@Id。元。:

public class Sequence {
    @Id
    protected final String name;
    protected Long counter;

    public Sequence(String name, Long counter) {
        this.name = name;
        this.counter = counter;
    }
    public String getName() {
        return name;
    }
    public Long getCounter() {
        return counter;
    }
    public void setCounter(Long counter) {
        this.counter = counter;
    }

}

オブジェクトをMongoDBに保存します。

template.save(new Sequence("Tag",0L))
于 2012-09-13T01:52:58.963 に答える