Javascript 使用Mongoose在MongoDB中按聚合层次结构进行$match

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

我尝试使用和regex对以前由
$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吗?等一下,我将尝试更清楚地定义输入和输出。