我有一个名为vacancy
的集合,其中包含以下字段:
[{
"name": "Software Developer",
"published_at": "2022-08-31"
},
{
"name": "Tech Lead",
"published_at": "2022-08-31"
},
{
"name": "Team Lead",
"published_at": "2022-08-31"
},
{
"name": "Software Engineer",
"published_at": "2022-08-31"
}]
聚合查询会返回给我两个基于两个REGXe的组,这将验证字段名称中是否存在单词。
类似的东西:
[{
"_id": "Software",
"count": 2
},
{
"_id": "Lead",
"count": 2
}]
Query1
null
组(全部采集1组(- 创建两个自定义组
- 如果软件为0,则为第一个和1
- 到第二个和1,如果Lead else为0
Playmongo
aggregate(
[{"$group":
{"_id": null,
"Software":
{"$sum":
{"$cond":
[{"$regexMatch": {"input": "$name", "regex": "Software"}}, 1, 0]}},
"Lead":
{"$sum":
{"$cond":
[{"$regexMatch": {"input": "$name", "regex": "Lead"}}, 1, 0]}}}}])
如果您想要与示例中完全相同的输出,请尝试这样做,但可能第一个查询也可以。
Query2
- 就像上面一样,但根变成了数组,这是不可执行的
- 最后替换根以获得预期输出中的2个文档
Playmongo(你可以把鼠标放在每个阶段的末尾看看它做什么(
aggregate(
[{"$group":
{"_id": null,
"Software":
{"$sum":
{"$cond":
[{"$regexMatch": {"input": "$name", "regex": "Software"}}, 1, 0]}},
"Lead":
{"$sum":
{"$cond":
[{"$regexMatch": {"input": "$name", "regex": "Lead"}}, 1, 0]}}}},
{"$unset": ["_id"]},
{"$project": {"array": {"$objectToArray": "$$ROOT"}}},
{"$unwind": "$array"}, {"$replaceRoot": {"newRoot": "$array"}},
{"$project": {"_id": "$k", "count": "$v"}}])