【发布时间】:2021-11-24 16:39:52
【问题描述】:
我有一个使用 Mongoid 的 Rails 应用程序,其类为 User、ContractAgreement 和 ContractVersions。
关系如下:User嵌入ContractAgreement,而ContractAgreement属于ContractVersions,像这样:
用户:
class User
include Mongoid::Document
include Mongoid::Stateful
include Mongoid::Timestamps
[...]
embeds_many :contract_agreements
合同协议:
class ContractAgreement
include Mongoid::Document
include Mongoid::Timestamps
embedded_in :user
belongs_to :contract_version
field :date_of_agreement, type: DateTime
合同版本
class ContractVersion
include Mongoid::Document
include Mongoid::Timestamps
field :version, type: String
field :description, type: String
field :status, type: String
has_one :post, autosave: true
has_one :post, autosave: true
#has_many :contract_agreements
如您所见,#has_many :contract_agreements 被注释掉,因为 Mongoid 不喜欢与嵌入文档的关联。
有没有办法获取同意指定合同的用户列表?
我一直都尝试过$elemMatch:
[64] pry(main)> reload!;
u = User.all.select{|u| u.contract_agreements.count > 0}.first ;
cv = u.contract_agreements.first.contract_version ;
User.where(contract_agreements: {'$elemMatch' => {contract_version: {'$elemMatch' => {_id: cv._id}}}}).count
Reloading...
=> 0
以及压缩的单个查询表示法:
[64] pry(main)> reload!;
u = User.all.select{|u| u.contract_agreements.count > 0}.first ;
cv = u.contract_agreements.first.contract_version ;
User.where("contract_agreements.contract_version._id" => cv._id).count
Reloading...
=> 0
我知道我要求的合同版本 ID 存在,因为我明确选择了一个用户。
这样的查询是否可能,或者我是否需要取消嵌入 ContractAgreement?如果可能,我做错了什么?
【问题讨论】:
标签: mongoid