1

我有兴趣打印一系列查询。我有以下代码。

start = datetime.datetime(2012, 2, 2, 6, 35, 6, 764) 

end = datetime.datetime(2012, 2, 2, 6, 55, 3, 381) 

for doc in db.model.find({'time': {'$gte': start, '$lt': end}}): 
    print doc 

它完成了这项工作,基本上打印出我插入数据的方式。

我的问题是这样的:

是否可以打印出整个查询的一个元素?例如,我希望它只打印项目或日期或插入的其他输入,而不是给我 {'time': datetime.datime(....), 'input1': ..., 'item': 。 ..}。否则,如果我必须重新解析已经解析的 mongodb 查询数据以放入 mongodb,这将大大减慢我的程序。

谢谢你。

4

1 回答 1

9

让我们了解一些有关 pymongo 工作原理的基础知识。

假设您在 Mongo 中有一些包含插入数据的集合。您想通过查询从该集合中获取数据:

cursor = db.model.find({'time': {'$gte': start, '$lt': end}})

“模型”集合对象的查找方法返回Cursor对象:一个包含有关查询和查询结果的所有信息的实体。

这样查询就完成了,下一步就是得到结果。Mongo 查询的结果类型可能因方法而异。在我们的例子中(find方法) - 结果是一堆 JSON 对象(迭代器对象),它们中的每一个都由dictPython 语言中的类型表示。这意味着您不必解析结果:它们已经被解析为 dicts

另一件事Cursor:它是懒惰的。这意味着您可以按需收到结果。如果是Cursor对象,您必须遍历它以获取通过查询获取的对象:

for result_object in cursor:
    print result_object   # result_object is a dict that holds JSON object
    result_object['_id']  # Mongo ObjectId of the result_object
    # result_object["<field_name>"]  # Value stored in a field named <fieldname>

通常,您必须尝试阅读Pymongo 教程:它很短,并提供了整个驱动程序如何工作的指导。

于 2012-08-14T18:51:54.207 回答