我目前正在使用 Python 来构建我的许多结果,而不是 MongoDB 本身。我试图了解聚合,但我有点挣扎。这是我目前正在做的一个例子,MongoDB 可能会更好地处理它。
我有一组节目和一组剧集。每个节目都有一个与之关联的剧集列表 (DBRefs)。(剧集存储在它们自己的集合中,因为程序和剧集都非常复杂和深入,因此嵌入是不切实际的)。每集都有一个持续时间(浮动)。如果我想找到一个节目的平均剧集持续时间,我这样做:
episodes = list(db.Episodes.find({'Program':DBRef('Programs',ObjectId(...))}))
durations = set(e['Duration'] for e in episodes if e['Duration'] > 0)
avg_mins = int(sum(durations) / len(durations) / 60
当一个节目超过 1000 集时,这非常慢。有没有办法在 MongoDB 中做到这一点?
这是 Mongo shell 格式的一些示例数据。三集属于同一个节目。如何计算节目的平均剧集时长?
> db.Episodes.find({
'_Program':DBRef('Programs',ObjectId('4ec634fbf4c4005664000313'))},
{'_Program':1,'Duration':1}).limit(3)
{
"_id" : ObjectId("506c15cbf4c4005f9c40f830"),
"Duration" : 1643.856,
"_Program" : DBRef("Programs", ObjectId("4ec634fbf4c4005664000313"))
}
{
"_id" : ObjectId("506c15d3f4c4005f9c40f8cf"),
"Duration" : 1598.088,
"_Program" : DBRef("Programs", ObjectId("4ec634fbf4c4005664000313"))
}
{
"_id" : ObjectId("506c15caf4c4005f9c40f80e"),
"_Program" : DBRef("Programs", ObjectId("4ec634fbf4c4005664000313")),
"Duration" : 1667.04
}