Javascript 使用Mongoose在MongoDB中按聚合层次结构进行$match
我尝试使用和regex对以前由Javascript 使用Mongoose在MongoDB中按聚合层次结构进行$match,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我尝试使用和regex对以前由$graphLookup记录聚合的$match 我已经在mongoldb shell中测试过了,它很有效!但通过mongoose返回空集,同样的查询被破坏了 (免责声明:这与我之前的问题重叠,但有时我需要比like match更大的灵活性,所以我决定再次提问) 比方说,我有: { "_id": 1, "name": "Dev", final: false } { "_id": 2, "name": "Eliot", "reportsTo": "Dev", final
$graphLookup
记录聚合的$match
我已经在mongoldb shell中测试过了,它很有效!但通过mongoose
返回空集,同样的查询被破坏了
(免责声明:这与我之前的问题重叠,但有时我需要比like match更大的灵活性,所以我决定再次提问)
比方说,我有:
{ "_id": 1, "name": "Dev", final: false }
{ "_id": 2, "name": "Eliot", "reportsTo": "Dev", final: false }
{ "_id": 3, "name": "Ron", "reportsTo": "Eliot", final: false }
{ "_id": 4, "name": "Andrew", "reportsTo": "Eliot", final: false }
{ "_id": 5, "name": "Andron", "reportsTo": "Eliot", final: false }
{ "_id": 6, "name": "Asya", "reportsTo": "Ron", final: true }
{ "_id": 7, "name": "Dan", "reportsTo": "Andrew", final: true }
{ "_id": 8, "name": "Don", "reportsTo": "Andron", final: true }
按调用聚合
db.employees.aggregate([
{$match: { final: true }},
{$graphLookup: {
from: "employees",
startWith: "$reportsTo",
connectFromField: "reportsTo",
connectToField: "name",
as: "reporters"
}},
{$match: ???}
])
我需要添加什么正则表达式匹配才能获得此结果:
{"_id": 7, "name": "Dan", "reportsTo": "Andrew", final: true,
"reporters": [
{ "_id": 1, "name": "Dev", final: false },
{ "_id": 2, "name": "Eliot", "reportsTo": "Dev", final: false },
{ "_id": 4, "name": "Andrew", "reportsTo": "Eliot", final: false }
]
},
{"_id": 8, "name": "Don", "reportsTo": "Andron", final: true,
"reporters": [
{ "_id": 1, "name": "Dev", final: false },
{ "_id": 2, "name": "Eliot", "reportsTo": "Dev", final: false },
{ "_id": 5, "name": "Andron", "reportsTo": "Eliot", final: false }
]
}
正如我所建议的,它必须通过应用$match-$和-$regex
来正确解决,由于我的案例限制(我需要动态生成regex规则),我没有能力准备斜杠regex模式
{$match:
{$and: [
{"reporters.name": {$regex: 'Andr(?:ew|on)'}},
{"reporters.name": {$regex: 'Eliot'}}
]}
}
它按预期工作
db.employees.aggregate([
{$match: { final: true }},
{$graphLookup: {
from: "employees",
startWith: "$reportsTo",
connectFromField: "reportsTo",
connectToField: "name",
as: "reporters"
}},
{$match:
{$and: [
{"reporters.name": {$regex: 'Andr(?:ew|on)'}},
{"reporters.name": {$regex: 'Eliot'}}
]}
}
])
您是否尝试了{$regex:/And/}语法?我想您没有具有此值的文档。mybe您想使用$or而不是$and吗?等一下,我将尝试更清楚地定义输入和输出。