我有这两个型号:
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
Run Code Online (Sandbox Code Playgroud)
如何检查是否存在具有某个'isrc'并且有字幕(无论有多少)的曲目?
我一直在尝试这个但似乎忽略了字幕标准:
Track.exists?(conditions: {isrc: my_isrc, :subtitles.exists => true})
Run Code Online (Sandbox Code Playgroud)
即使带有'isrc'的曲目没有字幕,它也会返回true.该怎么办?
你不能在mongo中这样做,因为Track和subtitle存储在不同的文档中.mongodb中的Exists命令只能验证自己文档中的字段,这里的关系在Tracktid文档中保存为track_id,而不是在Track文档中.所以Track没有字幕轨道.
实现此目的的一种简单方法是将您的关系从belongs_to更改为嵌入式.因此Track可以使用$ exists轻松验证字幕.
另一种方式是
Track.where(:isrc => my_isrc).select {|track| track.subtitles.count > 0}
Run Code Online (Sandbox Code Playgroud)
但是这个查询的缺点是对mongo进行多次往返以验证每个音轨的字幕数.
| 归档时间: |
|
| 查看次数: |
2341 次 |
| 最近记录: |