【发布时间】:2022-01-24 05:26:33
【问题描述】:
我想在加入时添加多个条件。加入满足以下条件的文档(属于同一集合):
- 有异性
- 在主文档年龄偏好和主文档之间有年龄(如果存在)在外国文档偏好之间有
age(如果存在)(即双向检查)
我的尝试如下,但有两个问题:
-
$exists不能在$expr里面使用,为什么 - 年龄查询是目前的一种方式
$lookup: {
"from": "appusers",
"let": { 'gen': "$gender",'pref': "$preference" },
"pipeline": [{
$match: {$expr: {
$and: [
{ $ne: ["$gender", "$$gen"]},
{ $or: [
{$exists: {"$age": false}},
{$and: [
{ $gte: ["$age", '$$pref.age_from' ] },
{ $lte: [ "$age", '$$pref.age_to' ] }
]}
]}
]
}}}],
"as": "matches"
}
示例: 输入文档:
{
name: "person1",
age: 36,
gender: "Male",
preference: {
age_from: 25,
age_to: 35
}
}
{
name: "person2",
age: 18,
gender: "Female",
preference: {
age_from: 25,
age_to: 40
}
}
{
name: "person3",
age: 26,
gender: "Female",
preference: {
age_from: 30,
age_to: 35
}
}
{
name: "person4",
age: 26,
gender: "Female",
preference: {
age_from: 30,
age_to: 40
}
}
输出: 对于第 1 个人,匹配数组将仅显示第 4 个人(同样第 4 个人匹配将显示第 1 个人),即:
{
name: person1,
age: 36,
gender: "Male",
preference: {
age_from: 28,
age_to: 35
},
matches: [
{
name: person4,
...
}
]
}
【问题讨论】:
-
我们可以提供一些示例数据集和预期输出吗?
-
@ray 我已经添加了示例数据
标签: mongodb mongoose mongodb-query aggregation-framework aggregation