MongoDB - 打印

use*_*999 0 python mongodb pymongo

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

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 
Run Code Online (Sandbox Code Playgroud)

它完成了工作,基本上打印了我如何插入数据.

我的问题是:

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

谢谢.

Ros*_*nko 7

让我们有一些关于pymongo如何工作的基础知识.

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

cursor = db.model.find({'time': {'$gte': start, '$lt': end}})
Run Code Online (Sandbox Code Playgroud)

方法查找"model"集合对象返回Cursor对象:包含有关查询和查询结果的所有信息的实体.

所以进行查询,下一步是获得结果.Mongo查询的结果类型可能因方法而异.在我们的例子中(find方法) - 结果是一堆JSON对象(迭代器对象),它们中的每一个都dict用Python语言中的类型表示.这意味着您不必解析结果:它们已经被解析为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>
Run Code Online (Sandbox Code Playgroud)

一般来说,你必须尝试阅读Pymongo教程:它很短,并指出整个驱动程序的工作方式.