Mongodb java api: WriteResult # getN()
Я пишу код Java, используя MongoDB с Java API, и я не уверен в какой-либо части Javadoc.
В многопоточном контексте я использую DBCollection.html # update (com.mongodb.DBObject, com.mongd.D.DBObject), чтобы обновить уникальный, но я видел, что два потока могут пытаться писать одновременно. В этом контексте я заметил, что только одна запись была сделана, поскольку Mongodb, похоже, использует оптимистичную блокировку записи, но я хотел узнать программно, в какой теме была написана запись, а какая - нет. Поскольку поведение "без обновления" было тихим (я не имею в виду никаких исключений или чего-то еще), я искал API как-то, чтобы ответить на мою проблему, и после некоторых тестов выяснил этот метод: WriteResult # ГЕТН()
public int getN()
Gets the "n" field
Returns:
Описание, гул... не совсем исчерпывающий. Мои тесты показали, что поток, который выигрывает запись, имеет getN(), который возвращает 1, а другой 0.
Итак, мой вопрос: может ли кто-нибудь подтвердить это?
Ответы
Ответ 1
В документации GetLastError()
Возвращаемое значение из команды - это объект с различными полями. Общие поля перечислены ниже; могут быть и другие поля.
- ok - true указывает, что команда getLastError успешно завершена. Это НЕ указывает на отсутствие последней ошибки.
- err - если не null, указывает на возникшую ошибку. Значение - текстовое описание ошибки.
- code - если установлен, указывает код ошибки, который произошел. connectionId - идентификатор соединения
- lastOp - op-id из последней операции
Для обновлений:
- n - если обновление было сделано, это количество обновленных документов.
Итак, в этом контексте "get" n "field" означает get n, который является числом обновленных документов. Если для параметра "multi" установлено значение true, оно может быть только 0 или 1.