在一个小博客应用程序中,我想按日期降序排序评论。最新评论将是最高评论。
典型的帖子如下:
{
"_id" : 15,
"title" : "Soup making techniques",
"content" : "In this tutorial we'd like to share best soup making practices.",
"updatedate" : ISODate("2017-10-19T21:13:19.193Z"),
"comments" : [
{
"content" : "This is my first comment.",
"_id" : 25,
"date" : ISODate("2017-10-19T21:13:31.328Z")
},
{
"content" : "Another comment.",
"_id" : 26,
"date" : ISODate("2017-10-19T21:29:36.536Z")
}
]
}
同样在python方面,相关代码看起来像这样;
post = document.find_one({'_id': int(number)}, sort=[("comments.date", -1)])
result = document.find_one( { '_id' : int(number) , "comments": { '$exists': True, '$ne': False } })
comments = []
commentlist = []
if result:
commentlist = post['comments']
print ("All comments", commentlist)
for comment in commentlist:
comments.append({'commentid' : comment['_id'], 'date' : comment['date'], 'content' : comment['content']})
答案 0 :(得分:1)
关于您发布的架构设计,还有一些值得一提的事情:
您发布的Python脚本被强制提取comments数组并将它们逐个插入临时文档,以使其进入排序顺序。我不认为这种方法会有效。您至少有两个选项可以避免这样做:
$push
修饰符$position
可以实现此目的(参见https://spark.apache.org/docs/1.6.0/api/scala/index.html#org.apache.spark.sql.functions)根据您的使用情况,选项1,2或两者都可能适用于您。
您可能还想查看存储评论用例:https://docs.mongodb.com/manual/reference/operator/update/push/