使用Mongoid,我有一个Order类和一个LineItem类。 Order类embeds_many line_items。标准功能正常。但是,搜索嵌入的行项目似乎总是起作用。例如,LineItem类有一个" account_id"领域。在尝试查找包含至少1个具有nil account_id字段的行项目的所有订单时,我尝试这样做:
Order.where('line_items.account_id' => nil)
这会返回2个订单,实际上包含含有nil account_ids的订单项。这两个订单都包含多个订单项,并且在两个订单中,某些订单项都有account_ids,因此这似乎可以按预期工作。
无论其
我碰巧发现我们系统中实际上有4个订单包含含有nil account_ids的订单项。我使用类似的东西验证了这一点:
Order.all.each do |o|
puts o._id if o.line_items.where(account_id: nil).count > 0
end
这打印出4个订单ID。我已经进入了这四个中的每一个并确认每个人确实包含一个帐号,其中account_id设置为nil。那么,为什么不进行第一次搜索工作呢?为什么第一次搜索只返回2个订单而不是4个?
在做了一些挖掘之后,我发现,在第一个查询返回的2个订单中,每个订单中的第一个订单项都有一个nil account_id。在包含nil account_ids但未被第一个查询返回的订单项的其他2个订单中,这两个订单中的第一个订单项都没有nil account_id,因此我想知道第一个搜索是否为I used仅用于实际搜索每个订单的许多嵌入行项目中的第一个。
这是一个Mongoid错误吗?或者我在这里做错了什么?我必须假设我做错了什么,但我无法找到可能出现的任何迹象。