嗨,他有一个MongoDB集合matchedpairs
,其数据结构如下:
每个文档都定义了彼此的成对连接,即1与2合并,而2与10合并,等等。
{
x:1,y:2
},{
x:2,y:10
},{
x:9,{
x:8,y:4
}
我想查询文档并检索成对的唯一不相交集,即返回这样的结果
{
set:[1,2,9,10]
},{
set:[8,4]
}
我熟悉聚合框架,但是看不到如何在$group
阶段创建正确的累加器以创建不相交集。下面的尝试仅给出一组相似的对。正如我所看到的,我必须创建一个完整的$ group阶段字符串(取决于我的数据集)才能得到我想要的结果。这里有什么聪明的主意吗?
db.matchedpairs.aggregate([
{
'$group': {
'_id': '$y','like': {
'$addToSet': '$x'
},'from': {
'$addToSet': '$y'
}
}
},{
'$project': {
'_id': 0,'set': {
'$setUnion': [
'$like','$from'
]
}
}
}
]
给予:
{
set:[4,8]
},{
set:[10,9]
},{
set:[1,2]
}