2012-06-17 4 views
3

Я создал коллекцию «sequence». Он имеет поля «имя» и «счетчик». Поле «name» установлено в поле «Tag» и «counter» равно 0. Ниже приведен код внутри метода, который возвращает следующее значение поля «counter».Создание/обновление последовательностей - MongoDB

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/, однако я хотел знать, что не так с этим фрагментом кода.

+0

Вы можете увеличить уровень регистрации на сервере mongod (например mongod -vvv) и проверить, что на самом деле отправляется на сервер, когда этот код выполняется? – jyemin

+0

Я выполнил код с чистым java-драйвером, с которым вы связались, и посмотрите это в журналах, работающих с mongod -v: Ср июн 20 19:41:33 [conn3] запустить командный тест. $ Cmd {findandmodify: "seq", query : {_id: "seq1"}, update: {$ inc: {seq: 1}}, new: true, upsert: true} Wed Jun 20 19:41:33 [conn3] query test.seq query: {_id : "seq1"} ntoreturn: 1 idhack: 1 reslen: 48 0ms Wed Jun 20 19:41:33 [conn3] update test.seq query: {_id: "seq1"} update: {$ inc: {seq: 1 }} idhack: 1 0ms – jyemin

+0

Я не совсем понял из этих журналов, что именно происходит. – devang

ответ

4

Ваш код работает правильно при условии, что вы сначала сохранили объект Sequence с именем «Tag» в 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))