gpt4 book ai didi

ruby - 我可以在不坚持的情况下删除 Mongoid 中的嵌入式文档吗?

转载 作者:可可西里 更新时间:2023-11-01 09:15:23 24 4
gpt4 key购买 nike

绝对与 this question 有关,但既然没有明确的答案,我觉得我应该再问一次。是否有任何方法可以从 Mongoid embeds_many 关系中删除嵌入式文档,而无需持久化?

我想修改内存中的嵌入式文档数组 - 然后通过单个 UPDATE 操作保留所有更改。具体来说,我想:

  1. 修改嵌入式文档数组(添加嵌入式文档/删除嵌入式文档/编辑嵌入式文档等)。
  2. 可能对 TLD 进行其他更改。
  3. 通过一次数据库调用保存所有更改。

最佳答案

可以使用 Mongoid 删除嵌入文档而不保存。诀窍是使用 assign_attributes 从父对象进行更改。例如:

class MyParent
include Mongoid::Document

field :name, type: String
embeds_many :my_children

def remove_my_child(child)
assign_attributes(my_children: my_children.select { |c| c != child })
end
end

class MyChild
include Mongoid::Document

embedded_in :my_parent

def remove
parent.remove_my_child(self)
end
end

my_parent = MyParent.first
my_first_child = my_parent.my_children.first

# no mongo queries are executed
my_first_child.remove

# now we can make another change with no query executed
my_parent.name = 'foo'

# and finally we can save the whole thing in one query which is the
# reason we used an embedded document in the first place, right?
my_parent.save!

关于ruby - 我可以在不坚持的情况下删除 Mongoid 中的嵌入式文档吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23691056/

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