Po uzyskaniu dostępu do dokumentu przez mongoid, zwraca on obiekt Ruby. Możesz zobaczyć dane zapisane w dokumencie tylko przez mongo shell (wystarczy wpisać "mongo" w swoim terminalu).
Obiekt jest tworzony przez Mongoid (MongoDB ODM/wrapper for rails). Obiekt ten może czasami wyglądać inaczej niż dokument.
Na przykład
po wyłączeniu trybu pola, które pole jest całkowicie usunięty z tego dokumentu. ALE, ponieważ twój model nadal zawiera to pole, MONGOID zwraca ci zerowy atrybut dla tego pola, zamiast dawać inną liczbę pól dla obiektów tego samego modelu.
model book.rb
class Book
include Mongoid::Document
field :name
field :author
end
W konsoli szyn typu
Book.create(name: "b1", author: "a1")
=> #<Book _id: 555231746c617a1c99030000, name: "b1", author: "a1">
W Mongo shell
db.books.find()
{ "_id" : ObjectId("555231746c617a1c99030000"), "name" : "b1", "author" : "a1" }
Teraz wyłączonym.
W konsoli szyn
Book.first.unset(:name)
=> #<Book _id: 555231746c617a1c99030000, name: nil, author: "a1">
W Mongo shell
db.books.find()
{ "_id" : ObjectId("555231746c617a1c99030000"), "author" : "a1" }
Jeśli jednak nadal nie chcą zobaczyć pola w konsoli szyn (Pamiętaj, to nie podejmuje się żadnej dodatkowej przestrzeni w db) zawsze możesz usunąć pole z modelu. Jeśli to zrobisz, utracisz dostęp do tego pola przez szyny/mongoid na dowolnym obiekcie. Będzie on obecny tylko w dokumencie i dostępny przez powłokę Mongo.
Mój wymóg jest taki, że po usunięciu go, kiedy otrzymam go w następnym wywołaniu, nie powinienem otrzymać tego atrybutu. Ale dostaję to z zerową wartością. –
Otrzymuję cały obiekt i zwracam go. Book.find (parametry [: id]), nie ma dostępu do poszczególnych pól. Masz rację. remove_attribute usuwa go z mongodb, ale dlaczego otrzymam go jako zero, kiedy robię Book.find (params [: id]) lub Book.all? –
Tak, zgadza się. Wielkie dzięki! Tęskniłem za tak trywialną rzeczą. –