Я имею 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"
}
Тогда для Google и т.д .. Даже если 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' работает на числовых значениях, и некоторые из ваши значения 'position' являются строками. – chridam
@chridam Если бы я изменил значение «n/a» на «0», это сработало бы? – Phorce
До тех пор, пока поля будут разрешены к числу, вы получите правильное среднее значение. – chridam