我希望在使用mongoose 的用户之间实现完美匹配.
下面是一个模式示例:
username: "Nicolas",
fruitiwant:["apple", "orange"]
fruitihave: ["banana"]
我希望有一个json,可以显示完美匹配的用户.User A想要user B拥有的水果.User B wants那水果user A has.
谢谢你的回答.
我希望在使用mongoose 的用户之间实现完美匹配.
下面是一个模式示例:
username: "Nicolas",
fruitiwant:["apple", "orange"]
fruitihave: ["banana"]
我希望有一个json,可以显示完美匹配的用户.User A想要user B拥有的水果.User B wants那水果user A has.
谢谢你的回答.
我们可以使用$lookup
匹配集合中满足条件的所有用户,然后我们只需分组以消除重复配对,如下所示:
db.collection.aggregate([
{
$lookup: {
from: "collection",
let: {
ihave: "$bookihave",
iwant: "$fruitiwant",
id: "$_id"
},
pipeline: [
{
$match: {
$expr: {
$and: [
{
$ne: [
"$_id",
"$$id"
]
},
{
$gt: [
{
$size: {
"$setIntersection": [
"$$ihave",
"$fruitiwant"
]
}
},
0
]
},
{
$gt: [
{
$size: {
"$setIntersection": [
"$$iwant",
"$bookihave"
]
}
},
0
]
}
]
}
}
},
{
$project: {
username: 1,
}
}
],
as: "perfect"
}
},
{
$unwind: "$perfect"
},
{
$project: {
matchedUserNames: {
$cond: [
{
$gt: [
"$username",
"$perfect.username"
]
},
[
"$perfect.username",
"$username",
],
[
"$username",
"$perfect.username"
]
]
}
}
},
{
$group: {
_id: "$matchedUserNames"
}
}
])