2011-10-17 77 views
1

编辑: 我已经略微提炼了一个问题。pymongo查询没有输出

mongo_documents = mongo_collection.find({"medicalObjectId": "269"}) 
print "\n\n" 
for this_document in mongo_documents: 
    print this_document 

print "-------------------------" 

pqr = 269 
mongo_documents2 = mongo_collection.find({"medicalObjectId": pqr}) 
print "\n\n" 
for this_document2 in mongo_documents2: 
    print this_document2 

我的问题是,我使用数字作为查询中的关键字的第一个代码块工作。但是,我使用变量的第二块,我没有输出。


我是python和pymongo的初学者,请耐心等待。

我有一个列表为; row = [1,2,...,100]

我想为列表中的每个条目查询一个mongodb集合。 收集的格式为: 集合= {“PK”,“ATTRIBUTE1”,“attribute2”,“attribute3”}

我想打电话给MongoDB的连接,并通过与排在我的列表中的每个条目迭代[我] = pk并返回其他属性作为输出。

即。 mongo_documents = mongo_collection.find({'pk':row [0]}) mongo_documents = mongo_collection.find({'pk':row [1]}) 等等。

,我有代码:

for row in result_set: 
    print row[0] 
    mongo_documents = mongo_collection.find({'medicalObjectId' : row[0]}) 
    print mongo_documents 
    for this_document in mongo_documents: 
     print "----------------------------------" 
     print this_document 

但是我没有得到任何输出。我哪里错了? 如果我打印mongo_documents,我得到

<pymongo.cursor.Cursor object at 0xe43150> 
+0

你为什么不使用IPython的,并试图检查this_document变量。当然,查找API并在代码中正确获取文档更容易,但我会鼓励您在初学者时使用它。 – spicavigo 2011-10-17 13:22:30

+0

尽管有上面的评论,让我解释一下。 mongo_document是一个将用于获取结果的游标。你可以像对待迭代器一样对待它,并继续调用它的next()方法来获取下一个匹配的文档,直到出现StopIteration异常。否则,你在循环中完成它的方式 – spicavigo 2011-10-17 13:27:16

回答

4

你可以使用$ MongoDB中的操作来获取所有的行一次,并遍历它们。

mongo_documents = mongo_collection.find({ 'medicalObjectId' : { '$in' : result_set } }); 
for doc in mongo_documents: 
    print mongo_documents 

我还没有测试过,下面评论如果它不起作用。

编辑

mongo_documents2 = mongo_collection.find({"medicalObjectId": str(pqr)}) 
print "\n\n" 
for this_document2 in mongo_documents2: 
    print this_document2 
+0

它没有工作。 再次没有输出,例外或其他。我得到的只是我打印的清单。 列表中的条目是整数,所以数据类型兼容性也不是问题。 – 2011-10-18 06:22:02

+0

你可以用你当前的代码和你得到的输出来编辑你的问题。 – spicavigo 2011-10-18 06:24:37

+0

我在这里主要问题是thibk; 'mongo_documents = mongo_collection.find({'medicalObjectId':row [0]})' 如果我使用数字而不是变量,它的工作原理。 即。 'mongo_documents = mongo_collection.find({'medicalObjectId':'269'})' 的作品。但是,如果我使用具有值269的vriable将无法工作。 即。 'abc = 269 mongo_documents = mongo_collection.find({'medicalObjectId':abc})' 将不会输出。 – 2011-10-18 06:35:49