我有websites
其中包含2个文件:MongoDB的聚合计算平均并将其添加到文档
{
"_id" : ObjectId("58503934034b512b419a6eab"),
"website" : "https://www.stackoverflow.com",
"name" : "Stack Exchange",
"keywords" : [
"helping",
"C#",
"PYTHON"
]
}
{
"_id" : ObjectId("58503934034b512b419a6eab"),
"website" : "https://www.google.com.com",
"name" : "Stack Exchange",
"keywords" : [
"search",
"engine",
]
}
我也有另外一个seo_tracking
其中包含:
{
"_id" : ObjectId("587373d6f6325811c8a0b3ad"),
"position" : "2",
"real_url" : "https://www.stackoverflow.com",
"created_at" : ISODate("2017-01-09T11:28:22.104Z"),
"keyword" : "helping"
},
{
"_id" : ObjectId("587373d6f6325811c8a0b3ad"),
"position" : "4",
"real_url" : "https://www.stackoverflow.com",
"created_at" : ISODate("2017-01-09T11:28:22.104Z"),
"keyword" : "C#"
}
等。这周围包含100 +文件
我想要做的是聚合seo_tracking
与website
在特定的URL((websites
)将匹配www.stackoverflow.com
(seo_tracking
)),我可以做得很好。不过,我想回每个websites
以下:
{
"_id" : ObjectId("587373d6f6325811c8a0b3ad"),
"website":"https://www.stackoverflow.com",
"avg_position" : "2"
}
那么对于谷歌等。即使avg_position
是0 ..我曾尝试以下:
db.seo_tracking.aggregate([
{
$lookup:
{
from: "websites",
localField: "real_url",
foreignField: "website",
as: "post_websites"
},
},
{
"$group": {
_id:null,
avg_position:{$avg:"$position"}
}
}
])
然而,这只是生产:
{
"_id" : null,
"avg_position" : 2.0
}
我需要做的是website
和理想还需要ID
任何想法,我要去哪里错了吗?
'$ avg'适用于数值,而一些你的位置值是字符串。 – chridam
@chridam如果我将“n/a”更改为“0”,可以工作吗? – Phorce
只要字段解析为数字,那么您将得到正确的平均值。 – chridam