我正在尝试使用 Mongo 聚合框架来查找在同一文档中具有不同唯一集的记录。一个例子将最好地解释这一点:
这是一个不是我真实数据的文档,但在概念上是相同的:
db.house.insert(
{
houseId : 123,
rooms: [{ name : 'bedroom',
owns : [
{name : 'bed'},
{name : 'cabinet'}
]},
{ name : 'kitchen',
owns : [
{name : 'sink'},
{name : 'cabinet'}
]}],
uses : [{name : 'sink'},
{name : 'cabinet'},
{name : 'bed'},
{name : 'sofa'}]
}
)
请注意,有两个具有相似项目的层次结构。也可以使用不属于自己的物品。我想找到像这样的文件:那里有一所房子使用了它不拥有的东西。
到目前为止,我已经使用如下聚合框架构建了结构。这让我得到了两组不同的项目。但是,我找不到任何可以给我设置交集结果的东西。请注意,由于以下情况,简单的设置大小计数将不起作用:['couch', 'cabinet'] 与 ['sofa', 'cabinet'] 相比。
{'$unwind':'$uses'}
{'$unwind':'$rooms'}
{'$unwind':'$rooms.owns'}
{'$group' : {_id:'$houseId',
use:{'$addToSet':'$uses.name'},
own:{'$addToSet':'$rooms.owns.name'}}}
产生:
{ _id : 123,
use : ['sink', 'cabinet', 'bed', 'sofa'],
own : ['bed', 'cabinet', 'sink']
}
那么我如何在流水线的下一阶段找到集合的使用和拥有的交集?