MongoDB平均聚合不';我不能正常工作

MongoDB平均聚合不';我不能正常工作,mongodb,aggregation,Mongodb,Aggregation,我是NoSQL数据库的新手。我想要的是显示标题,url和平均(评级)。 示例数据如下所示: { "_id" : ObjectId("52b3833bd3e98582d2bfb628"), "author" : { "name" : "Graydon Hoare", "email" : "graydon@gmail.com" }, "title" : "Why Rust ditched pure functions", "bo

我是NoSQL数据库的新手。我想要的是显示
标题
url
平均(评级)
。 示例数据如下所示:

{
    "_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

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

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

project
实际上做什么?
项目
的区别是什么?$project将带有请求字段的文档传递到管道中的下一个阶段$按指定的表达式对文档进行分组,并为每个不同的分组向下一阶段输出文档。