sql >> Databáze >  >> NoSQL >> MongoDB

Jedinečná omezení MongoDb pro časové období

V MongoDB neexistuje jednoduchý způsob, jak to udělat. Uvařil jsem jednu alternativní možnost, která by pro vás mohla fungovat. Pokud vaše data přicházejí v diskrétních krocích, například pokud jde o rezervační aplikaci, kde si uživatelé rezervují objekty na den nebo hodinu, můžete použít kombinaci jedinečných indexů a víceklíčových indexů. Předpokládejme například, že rezervace jsou na den. John Q si vyhrazuje 11. až 14. října včetně. To je něco jako 281. až 284. den v roce – předpokládejme, že to jsou přesně ty dny. Uložte pole rezervace jako pole dnů, které jsou rezervovány

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

Umístěte jedinečný index na span pole.

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

Nyní nemůžete vložit dokument, který má ve svém rozsahu některý z těchto dnů:

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

To by vám mohlo fungovat s nějakým dalším vylepšením, které vezme v úvahu rok, nebo to může být součástí složeného jedinečného indexu, aby se časové rozpětí stalo jedinečným, např. room_id pro rezervaci hotelu.

Dalším způsobem je pouze koordinace kontrol na straně klienta. Pokud máte více klientů, kteří spolu vůbec nemluví, myslím, že nejlepším způsobem, jak to udělat, by bylo sdílet "zámek" v databázi:findAndModify dokument v lock kolekce zkontrolovat a získat zámek. Jakmile klient získá zámek změnou pole v tomto dokumentu, může provést kontrolu překrývání pomocí dotazu a poté vložit, pokud je vše v pořádku, a poté zámek uvolnit opětovnou změnou příznaku na dokumentu zámku.




  1. Mongoose - Nelze vytvořit více než 4 pole pomocí `findOrCreate`

  2. mongoengine.fields.ImpproperlyConfigured:Knihovna PIL nebyla nalezena

  3. Mongodb:Dotaz na objekt json vnořený do pole

  4. MongoDB – Chyba:neplatné schéma, očekává se mongodb