这完全是关于在 Rails 应用程序中使用的has_and_belongs_to_many
关系和查询。mongodb
mongid3
我有class A
,class B
说:
class A
include Mongoid::Document
has_and_belongs_to_many :bs
end
和
class B
include Mongoid::Document
has_and_belongs_to_many :as
end
现在实例化 3 a
-s 和 3 b
-s:
a1 = A.create()
a2 = A.create()
a3 = A.create()
b1 = B.create()
b2 = B.create()
b3 = B.create()
现在一个接一个地引用它们,例如:
a1.bs.push([b1, b3])
a2.bs.push([b2, b3])
a3.bs.push(b2)
所以:
b1.as.all
=> [<#A _id: 1000000000000001>] # i.e. a1
b2.as.all
=> [<#A _id: 1000000000000002>, <#A _id: 1000000000000003>] # i.e. a2, a3
b3.as.all
=> [<#A _id: 1000000000000001>, <#A _id: 1000000000000002>] # i.e. a1, a2
a
-s类似:
a1.bs.all
=> [<#B _id: 2000000000000001>, <#B _id: 2000000000000003>] # i.e. b1, b3
a2.bs.all
=> [<#B _id: 2000000000000002>, <#B _id: 2000000000000003>] # i.e. b2, b3
a3.bs.all
=> [<#B _id: 2000000000000002>] # i.e. b2
现在我想得到那些a
有-s的b
-s,有
a3:
- a1 有 b1, b3 有: [[a1],[a1, a2]] => [a1, a2] => 不包括 a1
- a2 有 b2, b3 有: [[a2, a3],[a1, a2]] => [a1, a2, a3] => 包括 a2
a3 有 b2,其中有 [[a2, a3]] => [a2, a3] => 包括 a3
=> [a2, a3] => [<#A _id: 1000000000000002>, <#A _id: 1000000000000003>]
a1和a2:
- a1 有 b1, b3 有: [[a1],[a1, a2]] => [a1, a2] => 包括 a1
- a2 有 b2, b3 有: [[a2, a3],[a1, a2]] => [a1, a2, a3] => 包括 a2
a3 有 b2,其中有 [[a2, a3]] => [a2, a3] => 不包括 a3
=> [a1, a2] => [<#A _id: 1000000000000001>, <#A _id: 1000000000000002>]
不包括 a1
- a1 有 b1, b3 有: [[a1],[a1, a2]] => [a1, a2] => 包括 a1
- a2 有 b2, b3 有: [[a2, a3],[a1, a2]] => [a1, a2, a3] => 包括 a2
a3 有 b2,其中有 [[a2, a3]] => [a2, a3] => 不包括 a3
=> [a3] => [<#A _id: 1000000000000003>]
等等
我认为这很容易:
A.all.where("b.id" => a1._id).count
=> 0
或者
A.all.where(:"bs.id" => a1._id).count
=> 0
或者
A.all.where(:"b.id" => "1000000000000003").count
=> 0
但是没有...
TLDP:如何找到具有所需文档集合的文档?(比如说多级查询)?