在 mongodb - Rails + Mongoid 中删除文档中的字段

Delete a field in a document in mongodb - Rails + Mongoid

我想使用 ROR 删除文档中的字段。

我已经试过了

  1. book.remove_attribute(:姓名)
  2. 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.

访问