首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我可以在不持久化的情况下移除Mongoid中嵌入的文档吗?

我可以在不持久化的情况下移除Mongoid中嵌入的文档吗?
EN

Stack Overflow用户
提问于 2014-05-16 08:58:25
回答 3查看 954关注 0票数 6

肯定与this question有关,但由于没有明确的答案,我觉得我应该再问一次。有没有办法从Mongoid embeds_many关系中删除嵌入的文档,而不是持久化?

我想修改内存中嵌入文档的数组,然后用一次更新操作持久化所有更改。具体地说,我想:

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

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-08-29 06:27:23

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

代码语言:javascript
复制
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!
票数 4
EN

Stack Overflow用户

发布于 2016-06-07 23:45:22

在使用Mongoid两年多之后,我了解到我想要实现的东西没有任何运算符。删除带有Mongoid的嵌入式文档总是会导致数据库调用。

在这种情况下,绕过Mongoid直接使用mongo-ruby-driver会更容易一些。

票数 0
EN

Stack Overflow用户

发布于 2016-06-04 04:36:40

试试mongoid的

代码语言:javascript
复制
update_all()

Documentation

例如:如果我想让我所有的用户都成为Joe

代码语言:javascript
复制
User.update_all(name: 'Joe')

将会完全按照您的预期运行。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23691056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档