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

Phương thức hoạt động trong quá trình phát triển nhưng không hoạt động trong sản xuất Rails MongoDB

Nếu bạn có Coupon Mô hình Mongoid thì tập hợp trong MongoDB shell sẽ là db.coupons . Điều đó sẽ giải thích tại sao:

db.Coupon.insert(...)

trong MongoDB shell không cung cấp những gì bạn muốn tìm thấy trong mã Rails của mình.

Theo như nhận xét của Neil về $exists so với nil rõ ràng kiểm tra đi, tôi nghĩ bạn thực sự muốn nil (AKA null bên trong MongoDB) kiểm tra. Hãy xem xét điều này trong trình bao MongoDB:

> db.models.insert({ n: 11 })
> db.models.insert({ n: 0 })
> db.models.insert({ n: null })
> db.models.insert({ })
> db.models.find()
{ "_id" : ObjectId("571546e1ce2934dadf379479"), "n" : 11 }
{ "_id" : ObjectId("571546e4ce2934dadf37947a"), "n" : 0 }
{ "_id" : ObjectId("571546e7ce2934dadf37947b"), "n" : null }
{ "_id" : ObjectId("571546ecce2934dadf37947c") }

Vì vậy, chúng tôi có một bộ sưu tập với các tài liệu có n , không có n , có null rõ ràng giá trị cho n và không phải null giá trị cho n .

Sau đó, chúng ta có thể thấy sự khác biệt giữa các truy vấn Mongoid như :n => nil :

> db.models.find({ n: null })
{ "_id" : ObjectId("571546e7ce2934dadf37947b"), "n" : null }
{ "_id" : ObjectId("571546ecce2934dadf37947c") }

:n.exists => true (AKA :n => { :$exists => true } ):

> db.models.find({ n: { $exists: true } })
{ "_id" : ObjectId("571546e1ce2934dadf379479"), "n" : 11 }
{ "_id" : ObjectId("571546e4ce2934dadf37947a"), "n" : 0 }
{ "_id" : ObjectId("571546e7ce2934dadf37947b"), "n" : null }

:n => { :$exists => false } :

> db.models.find({ n: { $exists: false } })
{ "_id" : ObjectId("571546ecce2934dadf37947c") }

Vì vậy, :expires_at => nil các truy vấn sẽ tìm thấy các tài liệu không có expires_at cũng như các tài liệu có expires_at được đặt rõ ràng thành nil . Cả hai trường hợp đó đều sẽ xảy ra với Mongoid trừ khi bạn cẩn thận gọi remove_attribute thay vì gán nil và cả hai trường hợp đều có nghĩa là "không có ngày hết hạn".




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Nâng cấp tài liệu và / hoặc thêm tài liệu phụ

  2. Mongoose findById () trong một đối tượng của các lược đồ / tài liệu con lồng nhau - tổng hợp

  3. Số lượng MongoDB

  4. Lỗi Mongoose - không có phương thức 'toObject' sau khi nâng cấp

  5. Làm cách nào để cho phép trường null khi cập nhật trong Mongoose?