mongodb - 聚合 - $ unwind $ not

时间:2018-01-19 15:06:11

标签: mongodb

我在mongodb中的聚合有点问题;

收藏uczelnia:

{ 
"_id" : ObjectId("5a5e404e6494620e7471c51a"), 
"uczelnia" : "Politechnika Czestochowska", 
"miasto" : "Czestochowa", 
"ulica" : "Armii Krajowej 1", 
"doktorzy" : [
    {
        "imie" : "Janina", 
        "nazwisko" : "Kowalska"
    }, 
    {
        "imie" : "Dorota", 
        "nazwisko" : "Janiak"
    }, 
    {
        "imie" : "Andrzej", 
        "nazwisko" : "Duda"
    }
]}

{ 
"_id" : ObjectId("5a5e40636494620e7471c51b"), 
"uczelnia" : "Politechnika Wroclawska", 
"miasto" : "Wroclaw", 
"ulica" : "Jodlowa 15", 
"doktorzy" : [
    {
        "imie" : "Jolanta", 
        "nazwisko" : "Kanar"
    }, 
    {
        "imie" : "Mateusz", 
        "nazwisko" : "Laskowski"
    }, 
    {
        "imie" : "Piotr", 
        "nazwisko" : "Potrzebny"
    }
]}

我的聚合:

 db.uczelnia.aggregate([{
$match: {$unwind: "$doktorzy.imie"{$not: /a$/}}},{
$group: {_id: "$doktorzy.imie", liczba_Pan:{$sum:1}}},{
$sort: { liczba_Pan: 1 }}]);

我希望找到所有的医生(doktorzy)女性(名字中的最后一个字母) 学校(uczelnia)。 IMIE(名称)

告诉我这里弄错了什么,谢谢

1 个答案:

答案 0 :(得分:1)

你无法在1个展开管道阶段做到这一点。 第一个动作是展开数组,然后匹配并重新组合。 我将您的聚合更改为:

db.collection.aggregate(
[
    {
        $unwind: "$doktorzy"
    },
    {
        $match: {
        "doktorzy.imie" : { $regex : "a$", $options : "i"}
        }
    },
    {
        $group: {_id: "$doktorzy.imie", liczba_Pan:{$sum:1}}
    },
]);

匹配是一个正则表达式忽略大小写并匹配imie结束于" a"