mongodb,pymongo,聚合给出奇怪的输出(关于游标的东西)

标签 mongodb aggregation-framework pymongo

我正在尝试获取数据库中条目最多的人员列表。

print db.points.aggregate(
   [
      {
         "$group":
                    {
                       "_id": "$created.user", 
                       "count":{"$sum":1}
                    }
      },
      {
         "$sort":
                   {"count":-1}
      }
   ]
)

条目如下所示:

{
   u'id': u'342902', 
   u'_id': ObjectId('555af76a029d3b1b0ff9a4be'), 
   u'type': u'node', 
   u'pos': [48.9979746, 8.3719741], 
   u'created': {
                  u'changeset': u'7105928', 
                  u'version': u'4', 
                  u'uid': u'163673', 
                  u'timestamp': u'2011-01-27T18:05:54Z', 
                  u'user': u'Free_Jan'
               }
}

我知道 created.user存在并且可以通过其他方式访问。

我得到的输出仍然是:

<pymongo.command_cursor.CommandCursor object at 0x02ADD6B0>

我不应该得到一个排序列表吗?

最佳答案

聚合查询的结果是一个游标,就像常规的 find 查询一样。在 pymongo 的情况下,CommandCursor 是可迭代的,因此您可以执行以下任何操作:

cursor = db.points.aggregate(...)

# Option 1
print(list(cursor))

# Option 2
for document in cursor:
    print(document)

注意:arun noticed , 在这两种情况下,即在您从光标创建列表或在 for 循环中迭代之后,您将无法在光标上重新迭代。在这种情况下,第一个选项会变得更好,如果您想在将来使用它,因为您可以尽可能多地使用获得的列表,因为它已经在内存中。
无法重申的原因是游标实际上是在服务器上,并且它逐 block 发送数据,并且在向您发送所有数据(或服务器终止)后,游标被销毁。

关于mongodb,pymongo,聚合给出奇怪的输出(关于游标的东西),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30333020/

相关文章:

node.js - Mongoose for var in loop 在子文档中

mongodb - 如何将 $project ObjectId 转换为 mongodb 聚合中的字符串值?

javascript - mongodb 中带有投影字段的嵌套数组聚合查询?

java - cursor.next() 总是返回 "java.util.NoSuchElementException"

mongodb - 带有 continue_on_error 的 Pymongo w=1

mongodb - 在 pymongo 中保持游标存活

mongodb - Meteor:如何做一个不区分大小写的collection.findOne()?

linux - 运行 MONGODB 的 Linux 服务器是否会受到 2016 年添加闰秒计划的影响?

MongoDB 分组+排序不起作用

python - 在 PyMongo 中使用 IS NULL