虽然相同的查询返回mongoDB shell

时间:2016-07-15 16:14:28

标签: python mongodb pymongo

import pymongo
uri = 'mongodb://127.0.0.1:27017'
client = pymongo.MongoClient(uri)
db = client.TeamCity
students = db.students.find({})
for student in students:
    print (student)

Python结果:

空白

MongoDB:结果

db.students.find({})

{ "_id" : ObjectId("5788483d0e5b9ea516d4b66c"), "name" : "Jose", "mark" : 99 }
{ "_id" : ObjectId("57884cb3f7edc1fd01c3511e"), "name" : "Jordan", "mark" : 100
}
import pymongo
uri = 'mongodb://127.0.0.1:27017'
client = pymongo.MongoClient(uri)
db = client.TeamCity
students = db.students.find({})
print (students.count())

Python结果:

0

mongoDB结果

db.students.find({}).count()

2

我错过了什么?

对于

import pymongo
uri = 'mongodb://127.0.0.1:27017'
client = pymongo.MongoClient(uri)
db = client.TeamCity
students = db.students.find({})
print (students)

Python结果:

所以我认为它能够成功连接到数据库,但不能返回结果

2 个答案:

答案 0 :(得分:0)

尝试你的pymongo代码,即将TeamCity更改为Teamcity

打印所有学生:

import pymongo
uri = 'mongodb://127.0.0.1:27017'
client = pymongo.MongoClient(uri)
db = client.Teamcity
students = db.students.find({})
for student in students:
    print (student)

统计所有学生:

import pymongo
uri = 'mongodb://127.0.0.1:27017'
client = pymongo.MongoClient(uri)
db = client.Teamcity
students = db.students.find({})
print (students.count())

答案 1 :(得分:0)

我知道这个问题早已得到解答,但是今天我遇到了同样的问题,并且碰巧有不同的原因,所以我在这里添加一个答案。

在shell上运行的代码:

> db.customers.find({"cust_id": 2345}, {"pending_questions": 1,  _id: 0})
{ "pending_questions" : [ 1, 5, 47, 89 ] }

代码在PyMongo中不起作用(通过网络表单设置的cust_id):

db.customers.find({"cust_id": cust_id}, {"pending_questions": 1,  "_id": 0})

原来,shell中的数字被解释为int,而Python代码中使用的数字被PyMongo解释为浮点数,因此不返回匹配项。这证明了这一点:

cust_id = int(request.args.get('cust_id'))
db.customers.find({"cust_id": cust_id}, {"pending_questions": 1,  "_id": 0})

产生结果: [1.0, 5.0, 47.0, 89.0]

简单的解决方案是将所有类型都转换为python代码中的int类型。总之,shell推断出的数据类型可能与PyMongo推断出的数据类型不同,这可能是在Shell上运行时在shell上返回结果的查找查询不返回任何内容的原因之一。