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

标签 ruby-on-rails mongoid

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

我已经尝试过

  • book.remove_attribute(:name)
  • book.unset(:name)

  • 但是他们都将属性设置为nil,并且该属性仍然存在于对象中。

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

    最佳答案

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

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

    例如

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

    样板书.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">
    

    在Mongo shell 中
    db.books.find()
    { "_id" : ObjectId("555231746c617a1c99030000"), "name" : "b1", "author" : "a1" }
    

    现在,我们取消设置。

    在Rails控制台中
    Book.first.unset(:name)
     => #<Book _id: 555231746c617a1c99030000, name: nil, author: "a1">
    

    在Mongo shell 中
    db.books.find()
    { "_id" : ObjectId("555231746c617a1c99030000"), "author" : "a1" }
    

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

    关于ruby-on-rails - 在mongodb中的文档中删除字段-Rails + Mongoid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30120975/

    相关文章:

    ruby-on-rails - Vim - 命令 - T

    ruby-on-rails - 安装 Mongoid 后使用 Active Record 生成器?

    ruby-on-rails - 嵌套属性未保存为 Mongoid 中的references_one

    ruby-on-rails - Rails 和 Mongoid 的动态属性

    mongoid - 无法将 ActionDispatch::Http::UploadedFile 类的对象序列化为 BSON

    ruby-on-rails - Rails 中的分片表合并为单个 ActiveRecord 模型

    sql - rails : How to build statistics per day/month/year or How database agnostic SQL functions are missing (ex. : STRFTIME, DATE_FORMAT,DATE_TRUNC)

    ruby-on-rails - 如何处理 protect_from_forgery 以使 Rails 应用程序进行通信?

    ruby-on-rails - 使用 pry-rails 时如何清理 rails 控制台输出?

    ruby-on-rails - Mongoid store_in 产生随机结果