【问题标题】:pymongo and output of aggregatepymongo 和聚合的输出
【发布时间】:2015-09-13 22:44:15
【问题描述】:

这是我的 pymongo 调用

from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client['somedb']
collection = db.some_details
pipe = [{'$group': {'_id': '$mvid', 'count': {'$sum': 1}}}]
TestOutput = db.collection.aggregate(pipeline=pipe)
print(list(TestOutput))
client.close()

由于某种原因,结果列表为空,而在 Robomongo 中我得到非空输出。

格式不正确吗?

确切的 Robomongo 查询是

db.some_details.aggregate([{$group: {_id: '$mvid', count: {$sum: 1}}}])

更新 输出看起来像

{
    "result" : [ 
        {
            "_id" : "4f973d56a64facfaa7c3r4rf262ad5be695eef329aff7ab4610ddedfb8137427",
            "count" : 84.0000000000000000
        }, 
        {
            "_id" : "a134106e1a1551d296fu777cedc933e7df2d0a9bc5f41de047aba3ee29bace78",
            "count" : 106.0000000000000000
        }, 

    ],
    "ok" : 1.0000000000000000
}

【问题讨论】:

  • db 在 Robomongo 中的结果是什么?

标签: output aggregate pymongo


【解决方案1】:

您再次将db 添加到collection 否则代码对我来说似乎没问题。

这是您的代码的修改版本:

from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client['somedb']
collection = db.some_details
pipe = [{'$group': {'_id': '$mvid', 'count': {'$sum': 1}}}]
# Notice the below line
TestOutput = collection.aggregate(pipeline=pipe)
print(list(TestOutput))
client.close()

【讨论】:

  • 谢谢你,阿比吉特。删除 db 没有帮助。 find 等更简单的查询在没有 db 的情况下也可以工作,但 aggregate 是不同的。加上官方 pymongo 教程提到了db (api.mongodb.org/python/current/examples/…)。我想我会尝试将查询输出转储到 json 文件,然后将其读入 python。
  • 抱歉,阿比吉特!实际上删除 db 有帮助。返回的对象是某种字典的集合。将其转换为 list 不起作用,但可以遍历此集合。我猜官方的pymongo教程不是很准确。
猜你喜欢
  • 2020-01-15
  • 1970-01-01
  • 1970-01-01
  • 2019-01-22
  • 1970-01-01
  • 2021-12-31
  • 1970-01-01
  • 2020-12-26
  • 2014-03-01
相关资源
最近更新 更多