MongoDB平均聚合无法正常工作

时间:2019-01-21 20:05:47

标签: mongodb aggregation

我是NoSQL数据库的新手。我想要显示titleurlavg(ratings)。 示例数据如下所示:

{
    "_id" : ObjectId("52b3833bd3e98582d2bfb628"),
    "author" : {
        "name" : "Graydon Hoare",
        "email" : "graydon@gmail.com"
    },
    "title" : "Why Rust ditched pure functions",
    "body" : "sth",
    "url" : "http://thread.gmane.org/gmane.comp.lang.rust.devel/3674/focus=3855",
    "date" : ISODate("2013-04-30T13:23:00.000Z"),
    "starred" : 105,
    "ratings" : [ 
        3, 
        5, 
        3, 
        2, 
        4, 
        1, 
        3, 
        3, 
        3, 
        2, 
        3
    ],
    "comments" : [ 
        {
            "user" : "tr0lltherapy",
            "upVotes" : 18,
            "downVotes" : 2,
            "text" : "something",
            "replies" : [ 
                {
                    "user" : "thedeemon",
                    "upVotes" : 10,
                    "downVotes" : 0,
                    "text" : "something"
                }, 
                {
                    "user" : "mcandre",
                    "upVotes" : 0,
                    "downVotes" : 5,
                    "text" : "Performance? There are already a slew of performant languages. Assembler, C, C++, Go. What does Rust actually offer that's new and useful in this category, other than using my favorite abbreviation for the named function keyword, fn?"
                }, 
                {
                    "user" : "lacosaes0",
                    "upVotes" : 30,
                    "downVotes" : 6,
                    "text" : "Particular emphasis on memory safety."
                }
            ]
        }, 
        {
            "user" : "hypster",
            "upVotes" : 30,
            "downVotes" : 2,
            "text" : "tl;dr everybody was type-fu fighting",
            "replies" : [ 
                {
                    "user" : "homoiconic",
                    "upVotes" : 15,
                    "downVotes" : 0,
                    "text" : "Here comes the Big Boss, Hu! Simon Peyton-Jones."
                }
            ]
        }
    ],
    "tags" : [ 
        "Rust", 
        "Computer", 
        "Programming"
    ],
    "draft" : true,
    "published" : true
}

我尝试了以下查询,但无法正常工作,并将null值放入平均值。我不知道该如何解决。

db.getCollection('links').aggregate(
    [
        {
            $match: {
                "author.email": /@gmail.com$/
            }
        },
        {
            $project: {
                _id: 0,
                title: 1,
                url: 1,
                avgRatings: {
                    $avg: "$Ratings"
                }
            }
        }
    ])

预期输出为:

title: "Why Rust ditched pure functions", url: "http://thread.gmane.org/gmane.comp.lang.rust.devel/3674/focus=3855", 
avgRatings: 2.90

1 个答案:

答案 0 :(得分:1)

您有一个错字$Ratings;如下使用$ratings。聚合语法区分大小写。

db.getCollection('links').aggregate(
    [
        {
            $match: {
                "author.email": /@gmail.com$/
            }
        },
        {
            $project: {
                _id: 0,
                title: 1,
                url: 1,
                avgRatings: {
                    $avg: "$ratings"
                }
            }
        }
    ])