我是NoSQL数据库的新手。我想要显示title
,url
和avg(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
答案 0 :(得分:1)
您有一个错字$Ratings
;如下使用$ratings
。聚合语法区分大小写。
db.getCollection('links').aggregate(
[
{
$match: {
"author.email": /@gmail.com$/
}
},
{
$project: {
_id: 0,
title: 1,
url: 1,
avgRatings: {
$avg: "$ratings"
}
}
}
])