我有以下结构来存储用户的喜欢。例如,_id1用户喜欢用户_id2和_id3。其中_id1用户仅与用户_id2匹配。
我只需要匹配的记录。
文档结构 --
[ {'from':'_id1', 'to':'_id2'}, {'from':'_id1', 'to':'_id3'}, {'from':'_id2', 'to':'_id1'}, ]
预期输出 --
[ {'from':'_id1', 'to':'_id2'}, {'from':'_id2', 'to':'_id1'}, ]
您可以$group
"couple",然后才匹配那些总和为 2 的那些。诀窍是确保分组_id
相同 - 我只是用$cond
做了,并创建了元组[ _id1, _id2 ]
,其中较小的id始终位于第一个,如下所示:
db.collection.aggregate([
{
$group: {
_id: {
$cond: [
{
$gt: [
"$from",
"$to"
]
},
[
"$to",
"$from"
],
[
"$from",
"$to"
]
]
},
sum: {
$sum: 1
},
roots: {
$push: "$$ROOT"
}
}
},
{
$match: {
sum: {
$gt: 1
}
}
},
{
$unwind: "$roots"
},
{
$replaceRoot: {
newRoot: "$roots"
}
}
])