gpt4 book ai didi

mongoid - 使用 mongoid 的 has_and_belongs_to_many 和 inverse_of 有什么权衡

转载 作者:行者123 更新时间:2023-12-04 11:56:44 26 4
gpt4 key购买 nike

在文档中它说你可以使用 inverse_of: nil 但并没有真正描述用例:
http://mongoid.org/en/mongoid/docs/relations.html#has_and_belongs_to_many

我假设它在一个对象有很多另一个对象的情况下很有用,因此您可以使用 inverse_of nil 完全跳过那一侧并节省一些存储空间,对吗?

例如:

class Post
has_and_belongs_to_many :tags
end

class Tag
has_and_belongs_to_many :posts, inverse_of: nil
end

一个标签可能属于数百或数千个帖子,但一个帖子可能只有 5 个左右的标签。

那么这是一个很好的用例吗?我想你仍然可以做
tag.posts

等正常,主要的权衡是它改变了查询:
Post.find(tag.post_ids)

进入
Post.where(tag_ids: tag.id)

如果您在 tag_ids 上有一个索引,它似乎仍然会很快。所以也许最好的是这样的:
class Post
has_and_belongs_to_many :tags, index: true
end

class Tag
has_and_belongs_to_many :posts, inverse_of: nil
end

只是想检查一下我的想法。

最佳答案

您当然正确使用了用例,但示例似乎已重新设计。您的模型应如下所示:

class Post
has_and_belongs_to_many :tags, inverse_of: nil, index: true
end

class Tag
# you don't want this side as a tag can be related to 1000s of posts
end

您可以使用帖子中的关联,但对于标签,您必须自己创建查询。
post.tags                    # get tags for a post
Post.where(tag_ids: tag.id) # find posts for a tag

关于mongoid - 使用 mongoid 的 has_and_belongs_to_many 和 inverse_of 有什么权衡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10809636/

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