当前位置: 首页 > 知识库问答 >
问题:

MongoDB-聚合-$展开$不

甘英光
2023-03-14

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

收藏uczelna:

{ 
"_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)妇女(名字的最后一个字母a)在一所学校(uczelna)。imie(姓名)

告诉我我做错了什么,谢谢

共有1个答案

漆雕疏珂
2023-03-14

您无法在1放松管道阶段完成此操作。第一个操作是展开数组,然后进行匹配和重新分组。我将您的聚合更改为:

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

匹配是一个忽略大小写的正则表达式,匹配的imie以“a”结尾

 类似资料:
  • 我试图使用MongoDb列出展开嵌套数组。 一个产品包含任务,每个任务可以有零个、一个或多个子任务。 以下是产品文档示例: 结果: 聚合管道在对任务进行排序方面起到了很大的作用 有时任务没有子任务,例如: 当他们没有孩子的时候,还有什么可以帮助他们完成任务吗? 当前聚合: 期望的结果:

  • 我使用Nodejs和MongoDB与expressjs和mongoose库,创建一个具有用户、文章和评论模式的博客API。下面是我使用的模式。

  • 我使用聚合来展开一个数组,并按数组的每个元素分组,以对一些对应的值求和。 我的收藏是: 我想按sourceMedium分组。nodeValue和sum“totalConverions”和“totalConversionValue”,而不使用重复元素。 例如,通过使用展开、分组和和: 对于“nodeValue”:(direct)/(none)“TotalConversions之和等于3,对于“goo

  • 我正在使用MongoDB聚合框架展开一个数组,该数组有重复项,我需要在进一步分组时忽略这些重复项。 我如何才能做到这一点?

  • 第一个名为的文档包含以下文档(不包括): 第二个集合名为,具有以下文档: 上的 预期的结果是: 如何使用聚合查询来实现这一点?

  • 主要内容:aggregate() 方法,管道MongoDB 中的聚合操作用来处理数据并返回计算结果,聚合操作可以将多个文档中的值组合在一起,并可对数据执行各种操作,以返回单个结果,有点类似于 SQL 语句中的 count(*)、group by 等。 aggregate() 方法 您可以使用 MongoDB 中的 aggregate() 方法来执行聚合操作,其语法格式如下: db.collection_name.aggregate(aggr