gpt4 book ai didi

引用关系的 Mongoid 标准

转载 作者:可可西里 更新时间:2023-11-01 09:56:42 25 4
gpt4 key购买 nike

我有这两个模型:

class Track
include Mongoid::Document
field :artist, type: String
field :title, type: String
field :isrc, type: String
has_many :subtitles
end

class Subtitle
include Mongoid::Document
field :lines, type: Array
belongs_to :track
end

如何检查是否存在具有特定“isrc”和字幕(无论有多少)的轨道?

我一直在尝试这个,但它似乎忽略了字幕标准:

Track.exists?(conditions: {isrc: my_isrc, :subtitles.exists => true})

即使带有“isrc”的轨道没有字幕,它也会返回 true。怎么办?

最佳答案

你根本不能在 mongo 中这样做,因为轨道和字幕存储在不同的文档中。 mongodb中的exists命令只能校验自己文档中的字段,这里的关系是在Subtitle文档中维护的,track_id不在Track文档中。所以 Track 没有字幕的轨道。

实现此目的的一个简单方法是将您的关系从 belongs_to 更改为 embedded。因此 Track 可以使用 $exists 轻松验证字幕。

另一种方式是

Track.where(:isrc => my_isrc).select {|track| track.subtitles.count > 0}

但此查询的缺点是对 mongo 进行多次往返以验证每个轨道的字幕计数。

关于引用关系的 Mongoid 标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6892109/

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