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

Dee*_*boj 6 ruby-on-rails mongoid

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

我已经尝试过了

  1. book.remove_attribute(:名称)
  2. book.unset(:名称)

但是它们都将属性设置为nil,并且它仍然存在于对象中.

我希望它从我的文件中消失.欢迎任何帮助.

小智 7

通过mongoid访问文档时,它将返回一个Ruby对象。实际上,您只能通过mongo shell(只需在终端中键入“ mongo”)查看存储在文档中的数据。

该对象由Mongoid(用于导轨的MongoDB ODM /包装器)创建。该对象有时看起来可能与文档不同。

例如

取消设置字段时,该字段将从该文档中完全删除。但是,由于模型仍然具有该字段,因此MONGOID会为您返回该字段的nil属性,而不是为相同模型的对象提供不同数量的字段。

样板书.rb

class Book
  include Mongoid::Document

  field :name
  field :author
end
Run Code Online (Sandbox Code Playgroud)

在Rails控制台中,键入

 Book.create(name: "b1", author: "a1")
    => #<Book _id: 555231746c617a1c99030000, name: "b1", author: "a1">
Run Code Online (Sandbox Code Playgroud)

在Mongo Shell中

db.books.find()
{ "_id" : ObjectId("555231746c617a1c99030000"), "name" : "b1", "author" : "a1" }
Run Code Online (Sandbox Code Playgroud)

现在,我们取消设置。

在Rails控制台中

Book.first.unset(:name)
 => #<Book _id: 555231746c617a1c99030000, name: nil, author: "a1">
Run Code Online (Sandbox Code Playgroud)

在Mongo Shell中

db.books.find()
{ "_id" : ObjectId("555231746c617a1c99030000"), "author" : "a1" }
Run Code Online (Sandbox Code Playgroud)

但是,如果您仍然不想在Rails控制台中看到该字段(请注意,这不会占用db中的任何额外空间),则可以随时从模型中删除该字段。如果这样做,您将不再能够通过任何对象上的rails / mongoid访问此字段。它只会出现在文档中,并且可以通过mongo shell访问。