MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDb уникални ограничения за период от време

Няма прост начин да направите това в MongoDB. Сготвих една алтернативна опция, която може да ви свърши работа. Ако вашите дати идват на отделни стъпки, например ако това е за приложение за резервация, където потребителите резервират обекти по ден или час, тогава можете да използвате комбинация от уникални индекси и индекси с множество ключове. Да предположим например, че резервациите са през деня. John Q запазва от 11 октомври до 14 октомври включително. Това е нещо като 281-ия до 284-ия ден от годината - да приемем, че точно това са дните. Запазете полето за резервация като масив от дните, които са резервирани

> db.reservations.insert({ "span" : [ 281, 282, 283, 284 ] })

Поставете уникален индекс на span поле.

> db.reservations.ensureIndex({ "span" : 1}, { "unique" : 1 })

Сега не можете да вмъкнете документ, който има някой от тези дни в своя диапазон:

> db.reservations.insert({ "span" : [ 279, 280, 281, 282 ] })
// unique key error

Това може да ви свърши работа с някои допълнителни настройки, за да вземете предвид годината, или може да е част от съставен уникален индекс, за да направите времевите интервали уникални чрез напр. room_id за хотелска резервация.

Друг начин е просто да координирате проверките от страна на клиента. Ако имате множество клиенти, които изобщо не си говорят, предполагам, че най-добрият начин да направите това е да споделите „заключване“ в базата данни:findAndModify документ в lock колекция за проверка и получаване на заключване. След като клиентът получи ключалката, като промени поле в този документ, той може да направи проверка за припокривания със заявка и след това да вмъкне, ако всичко е наред, след което да освободи ключалката, като промени отново флага на заключващия документ.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Какво е проблемът за писане на mongod по подразбиране в коя версия?

  2. Каква е разликата между методите insert(), insertOne() и insertMany()?

  3. MongoDB $lookup Objectid получава празен масив?

  4. Сума на агрегиране в Spring Data MongoDB

  5. Импортирайте CSV файл (съдържа някои не-UTF8 знаци) в MongoDb