MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Các ràng buộc duy nhất của MongoDb trên Phạm vi ngày

Không có một cách đơn giản nào để thực hiện việc này trong MongoDB. Tôi đã đưa ra một lựa chọn thay thế có thể phù hợp với bạn. Nếu ngày tháng của bạn diễn ra theo các bước rời rạc, chẳng hạn như trường hợp này dành cho ứng dụng đặt phòng mà người dùng đặt trước đối tượng theo ngày hoặc giờ, thì bạn có thể sử dụng kết hợp các chỉ mục duy nhất và chỉ mục đa khóa. Ví dụ:giả sử đặt chỗ theo ngày. John Q dự trữ từ 11 tháng 10 đến 14 tháng 10, bao gồm cả. Đó là một cái gì đó giống như ngày thứ 281 đến ngày thứ 284 trong năm - hãy giả sử đó chính xác là những ngày đó. Lưu trường đặt chỗ dưới dạng một mảng các ngày được đặt trước

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

Đặt một chỉ mục duy nhất trên span trường.

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

Bây giờ bạn không thể chèn một tài liệu có bất kỳ ngày nào trong số đó trong khoảng thời gian của nó:

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

Điều này có thể phù hợp với bạn với một số điều chỉnh bổ sung để tính đến năm hoặc nó có thể là một phần của chỉ mục duy nhất kết hợp để làm cho các khoảng thời gian trở thành duy nhất bằng cách ví dụ:room_id để đặt phòng khách sạn.

Một cách khác là chỉ cần phối hợp các kiểm tra ở phía khách hàng. Nếu bạn có nhiều ứng dụng khách không nói chuyện với nhau, tôi đoán cách tốt nhất để làm điều này là chia sẻ "khóa" trong cơ sở dữ liệu:findAndModify một tài liệu trong lock bộ sưu tập để kiểm tra và có được một khóa. Sau khi khách hàng có khóa bằng cách thay đổi một trường trên tài liệu đó, nó có thể thực hiện kiểm tra chồng chéo với một truy vấn và sau đó chèn nếu tất cả đều ổn, sau đó giải phóng khóa bằng cách thay đổi lại cờ trên tài liệu khóa.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cách khởi động mongo db trên Windows

  2. Sự khác biệt giữa việc trang trí một thuộc tính trong C # với BsonRepresentation (BsonType.ObjectId) so với BsonId và ObjectId

  3. Tại sao mongodb được đặt lại sau khi đẩy sang openshift

  4. Làm thế nào để truy vấn MongoDB để kiểm tra xem một mục có tồn tại hay không?

  5. Thứ tự của các chỉ mục kết hợp quan trọng như thế nào trong hiệu suất MongoDB?