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.