mongodb, pymongo, aggregate 给出了奇怪的输出(关于游标的东西)
mongodb, pymongo, aggregate gives strange output (something about cursor)
我正在尝试获取数据库中条目最多的人的列表。
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)
注意: as ,在这两种情况下,即在您创建游标列表之后,或者在 for 循环中迭代,您将无法重新迭代光标。在这种情况下,第一个选项变得更好,如果你想在未来使用它,因为你可以尽可能多地使用获得的列表,因为它已经在内存中了。
无法重申的原因是游标实际上在服务器上,它逐块发送数据,在它向您发送所有数据(或服务器终止)后,游标被销毁。
我正在尝试获取数据库中条目最多的人的列表。
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)
注意: as
无法重申的原因是游标实际上在服务器上,它逐块发送数据,在它向您发送所有数据(或服务器终止)后,游标被销毁。