Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pymongo按降序排序注释_Python_Mongodb_Pymongo - Fatal编程技术网

Python Pymongo按降序排序注释

Python Pymongo按降序排序注释,python,mongodb,pymongo,Python,Mongodb,Pymongo,在一个小型博客应用程序中,我想按照日期降序排列评论。最新评论将在顶部 典型的帖子如下所示: { "_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"), "co

在一个小型博客应用程序中,我想按照日期降序排列评论。最新评论将在顶部

典型的帖子如下所示:

{
    "_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']})

关于您发布的模式设计,有两件事值得一提:

  • 如果一篇文章有很多长评论,那么它的大小可能会超过16MB,这是MongoDB文档的大小限制
  • 正如您所发现的,将注释放入数组会使排序变得困难
  • 您发布的Python脚本被强制提取注释数组,并将它们逐个插入到临时文档中,以将其排序。我认为这种方法不会奏效。您至少有几个选项可以避免这样做:

  • 在数组的开头插入新注释,以便数组始终按降序排序。这可以通过使用带有
    $position
    修饰符的
    $push
    来实现(请参阅)
  • 将评论放在一个单独的集合中,参考原始帖子。这使得它很容易进行排序,并权衡了相对更复杂的检索(但它不会比当前的脚本更糟糕)
  • 根据您的用例,选项1、2或两者都可能适用于您

    您可能还想看看存储注释用例: