gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:09:32 25 4
gpt4 key购买 nike

我想使用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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com