2013-02-19 3 views
0

У меня странная проблема с функцией find_one Pymongo. У меня есть db, называемый «cluster_db», размещенный на моей локальной машине. У него есть коллекция под названием «кластеры». Когда я запускаю запрос в оболочке mongo, я получаю следующий вывод.PyMongo find_one не работает

> db 
cluster_db 
> db.clusters.findOne({_id:-8488068664808428000}) 
{ 
    "_id" : NumberLong("-8488068664808427924"), 
    "members" : [ 
     { 
      "participationCoeff" : 1, 
      "tweetID" : NumberLong("-8488068664808427924") 
     } 
    ] 
} 
> 

Теперь, во время моей фазы инициализации коды У меня есть константа, определенная в модуле «dbutil», как это:

DB_CONNECTION   = MongoClient('localhost', 27017) 
CLUSTER_DB_HANDLE  = DB_CONNECTION['cluster_db'] 

После этого, в функции, я делаю следующий вызов.

dbutil.CLUSTER_DB_HANDLE.clusters.find_one({'_id':clusterID}) 

Однако вышеуказанный вызов всегда возвращает «Нет». Если я перейду в MongoShell и запустил тот же самый запрос с тем же самым идентификатором clusterID, я вижу результат.

Я знаю, что это странная ошибка, но почему-то я не могу понять, почему это происходит. В другом месте я могу успешно совершать вызовы в коллекцию кластеров в cluster_db, используя dbutil.CLUSTER_DB_HANDLE.clusters

+0

В командной строке '' id возвращаемого документа действительно не соответствует '_id' в' findOne'? – JohnnyHK

+0

Да! Проблема заключается в том, что _id хранится как NumberLong(), но все же я конвертирую свой идентификатор clusterID в длинный, используя метод python long, прежде чем использовать find_one(). Но все же это не работает! – VaidAbhishek

+1

Так что конкретно вы пытаетесь сделать в Python, который не работает? – JohnnyHK

ответ

0

is clusterID == -8488068664808428000? Почему бы вам не попробовать CLUSTER_DB_HANDLE.clusters.find_one ({'_ id': - 8488068664808428000})?

0

Просто наткнулся на это сам, и получается, что идентификатор я Передаваемый целый тип, и я должен был преобразовать его с помощью вызова Int (идентификатор), например:

db.Employees.find_one({'id' : int(id)}) // this works 
db.Employees.find_one({'id' : id}) //this doesn't work 

Надеется, что это поможет кому-то.

Смежные вопросы