在 mongodb - Rails + Mongoid 中删除文档中的字段
Delete a field in a document in mongodb - Rails + Mongoid
我想使用 ROR 删除文档中的字段。
我已经试过了
- book.remove_attribute(:姓名)
- book.unset(:姓名)
但他们都将属性设置为 nil,并且它仍然存在于对象中。
我希望它从我的文档中消失。欢迎任何帮助。
当您通过 mongoid 访问文档时,它 returns 您是一个 Ruby 对象。您实际上只能通过 mongo shell 查看存储在文档中的数据(只需在您的终端中输入 'mongo')。
对象由 Mongoid 创建(MongoDB ODM/wrapper for rails)。此对象有时看起来可能与文档不同。
例如
当您取消设置一个字段时,该字段将从该文档中完全删除。但是,由于您的模型上仍然有该字段,MONGOID returns 您为该字段设置了一个 nil 属性,而不是为同一模型的对象提供不同数量的字段。
型号book.rb
class Book
include Mongoid::Document
field :name
field :author
end
在 rails 控制台中,键入
Book.create(name: "b1", author: "a1")
=> #<Book _id: 555231746c617a1c99030000, name: "b1", author: "a1">
在Mongoshell
db.books.find()
{ "_id" : ObjectId("555231746c617a1c99030000"), "name" : "b1", "author" : "a1" }
现在,我们取消设置。
在rails控制台中
Book.first.unset(:name)
=> #<Book _id: 555231746c617a1c99030000, name: nil, author: "a1">
在Mongoshell
db.books.find()
{ "_id" : ObjectId("555231746c617a1c99030000"), "author" : "a1" }
如果您仍然不想在 rails 控制台中看到该字段(请注意,这不会在数据库中占用任何额外的 space),您可以随时从模型。如果这样做,您将无法再通过任何对象上的 rails/mongoid 访问此字段。它只会出现在文档中并可通过 mongo shell.
访问
我想使用 ROR 删除文档中的字段。
我已经试过了
- book.remove_attribute(:姓名)
- book.unset(:姓名)
但他们都将属性设置为 nil,并且它仍然存在于对象中。
我希望它从我的文档中消失。欢迎任何帮助。
当您通过 mongoid 访问文档时,它 returns 您是一个 Ruby 对象。您实际上只能通过 mongo shell 查看存储在文档中的数据(只需在您的终端中输入 'mongo')。
对象由 Mongoid 创建(MongoDB ODM/wrapper for rails)。此对象有时看起来可能与文档不同。
例如
当您取消设置一个字段时,该字段将从该文档中完全删除。但是,由于您的模型上仍然有该字段,MONGOID returns 您为该字段设置了一个 nil 属性,而不是为同一模型的对象提供不同数量的字段。
型号book.rb
class Book
include Mongoid::Document
field :name
field :author
end
在 rails 控制台中,键入
Book.create(name: "b1", author: "a1")
=> #<Book _id: 555231746c617a1c99030000, name: "b1", author: "a1">
在Mongoshell
db.books.find()
{ "_id" : ObjectId("555231746c617a1c99030000"), "name" : "b1", "author" : "a1" }
现在,我们取消设置。
在rails控制台中
Book.first.unset(:name)
=> #<Book _id: 555231746c617a1c99030000, name: nil, author: "a1">
在Mongoshell
db.books.find()
{ "_id" : ObjectId("555231746c617a1c99030000"), "author" : "a1" }
如果您仍然不想在 rails 控制台中看到该字段(请注意,这不会在数据库中占用任何额外的 space),您可以随时从模型。如果这样做,您将无法再通过任何对象上的 rails/mongoid 访问此字段。它只会出现在文档中并可通过 mongo shell.
访问