Как я могу убедиться, что в Mongodb существует только один документ со значением X - PullRequest
0 голосов
/ 12 июня 2018

У меня есть несколько экземпляров программного обеспечения, пишущих / читающих из одного и того же экземпляра Mongodb, и я должен убедиться, что документ со значением X поля Y был вставлен только один раз в течение периода T.

Я застрял навыясняя, как этого добиться, я прочитал эту запись и понимаю, что Mongodb блокирует db до тех пор, пока не закончится текущая запись, однако этого будет недостаточно, чтобы гарантировать цель.

Сценарий IЯ ожидаю, что произойдет, будет продемонстрировано следующее:

Diagram

И результатом будет дублированный документ.

Я думаю, чтоОдним из решений может быть блокировка базы данных от шагов «чтение из Mongodb» до шагов «запись в Mongodb», но я не уверен, возможно ли это сделать с Mongodb.

Обновление:

хорошо иметь дублированный документ, если период T прошел с момента вставки первого документа со значением X поля Y.

1 Ответ

0 голосов
/ 12 июня 2018

вы можете попробовать добавить уникальный индекс в поле Y - в вашем случае 2-й экземпляр должен получить ошибку при создании документа, поскольку документ значения X для поля Y уже существует.

для создания индекса: ( подробнее здесь )

db.yourCollection.createIndex( { "Y": 1 }, { unique: true } )

// замечания после обновления вопроса

в этом случае предложенного мной решения будет недостаточно.вероятно, что будет работать добавление поля, в котором хранится метка времени последнего обновления (назовем его updated_at), а затем запуск команды upsert с учетом updated_at и Y

db.yourCollection.update(
  {
    updated_at: {
        $gte: ISODate("2018-06-01T00:00:00.000Z"),
        $lt: ISODate("2018-06-01T01:00:00.000Z") # one hour interval
    },
    Y: {
      $exists: false
    }
  },
  {
    upsert: true
  }
)

, обратите внимание, что коллекцияпри увеличении коллекции

потребуется индекс для updated_at и Y
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...