【问题标题】:pymongo no output for querypymongo 没有查询输出
【发布时间】:2011-10-17 13:17:23
【问题描述】:

编辑: 我稍微提炼了这个问题。

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的初学者,请多多包涵。

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

我想为列表中的每个条目查询一个 mongodb 集合。 该集合具有以下格式: 集合 = {'pk'、'attribute1'、'attribute2'、'attribute3'}

我想调用 mongodb 连接并使用 row[i]=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,我会得到 ​​p>

    <pymongo.cursor.Cursor object at 0xe43150>

【问题讨论】:

  • 你为什么不使用 ipython 并尝试检查 this_document 变量。当然,仅查找 API 并在代码中正确获取文档会更容易,但我鼓励您像初学者一样尝试使用它。
  • 尽管有上面的评论,让我解释一下。 mongo_document 是一个游标,您将使用它来获取结果。你可以把它当作一个迭代器,并继续调用它的 next() 方法来获取下一个匹配的文档,直到你得到 StopIteration 异常。或者,你在循环中完成它的方式

标签: python mongodb pymongo


【解决方案1】:

您可以使用 mongodb 的 $in 运算符一次获取所有行并遍历它们。

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

【讨论】:

  • 它没有用。再次没有输出,异常或其他。我得到的只是打印出来的我的清单。列表中的条目是整数,因此数据类型兼容性也不是问题。
  • 你能用你当前的代码和你得到的输出来编辑你的问题吗?
  • 我认为主要问题在这里; mongo_documents = mongo_collection.find({'medicalObjectId':row[0]}) 如果我使用数字而不是变量,它可以工作。 IE。 mongo_documents = mongo_collection.find({'medicalObjectId':'269'}) 有效。但是,如果我使用值为 269 的变量将不起作用。 IE。 abc = 269 mongo_documents = mongo_collection.find({'medicalObjectId':abc}) 不会给出任何输出。
  • 为什么在一种情况下使用字符串而在另一种情况下使用整数。即“269”和 abc=269?
  • hmmm... 这是否意味着我必须将变量作为字符串传递?让我试试。
猜你喜欢
  • 1970-01-01
  • 2016-11-03
  • 1970-01-01
  • 2013-03-07
  • 2014-11-09
  • 1970-01-01
  • 1970-01-01
  • 2010-12-17
  • 1970-01-01
相关资源
最近更新 更多