我有一个这样的样本数据:
`db.contact.insert(
[
{ _id: 1, name: 'John legend',age: 35},
{ _id: 2, name: 'michael Ava',age: 40},
{ _id: 3, name: 'Tom holand',age: 20},
{ _id: 4, name: 'Frido pex',age: 25},
{ _id: 5, name: 'Daniel Gunava',age: 30},
{ _id: 6, name: 'Mert Brava',age: 30}
]`
我想对名字中包含“ava”一词的人和另一组不包含ava的人进行分组并统计有多少人。
我知道如何在这样的函数中使用 $regex 和 group
`db.contact.find({name: {$regex: /ava/,$options: "i" }});`
`db.contact.aggregate([{$group: {_id: "$name",count: {$sum: 1},}}]);`
如何结合上面的2个功能。任何帮助表示赞赏
我试过了(没用)
db.contact.aggregate([
{
$group: {
_id: "$name",
{$regex: /ava/,$options: "i" }
count: {$sum: 1},
}
}
]);
您可以将
$facet
用于 2 种不同的情况。只需将您的尝试放入 $facet
管道即可。
db.contacts.aggregate([
{
"$facet": {
"contains": [
{
"$match": {
name: {
$regex: "ava",
$options: "i"
}
}
},
{
"$group": {
_id: "$name",
count: {
$sum: 1
}
}
}
],
notContains: [
{
"$match": {
$expr: {
$eq: [
null,
{
"$regexFind": {
"input": "$name",
"regex": "ava",
"options": "i"
}
}
]
}
}
},
{
"$group": {
_id: "$name",
count: {
$sum: 1
}
}
}
]
}
}
])