Pymongo返回的数据与MongoDB Sh不同

2024-05-23 17:55:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我在使用monogdb进行赋值,遇到了以下问题:pymongo返回的文档与{}返回的文档不匹配。一个简单的test.py

from pymongo import MongoClient
from bson.objectid import ObjectId

client = MongoClient()
db = client['dev_database']
print db.trials.find_one(ObjectId('522f975dc91e273451569942'))
print list(db.trials.find({'_id':ObjectId('522f975dc91e273451569942')}))

为了以防万一。这将返回:

^{pr2}$

如果我在MongoDB Shell中做同样的事情:

> use dev_database
switched to db dev_database
> db.trials.find('522f975dc91e273451569942')
{ "_id" : "522f975dc91e273451569942", "nurse_id" : "522f975dc91e273451569941", "question_ids" : [ ], "name" : "Test Trial", "clinician_id" : "522f975dc91e273451569940", "arms" : { "Med1" : "", "Placebo" : "" }, "participant_ids" : [
        "52325b93c91e274e81f4bdda",
        "52325b93c91e274e81f4bddb",
        "52325b93c91e274e81f4bddc",
        "52325b93c91e274e81f4bddd",
        "52325b93c91e274e81f4bdde"
], "keywords" : [ "abc", "123" ] }
>

如您所见,test.py返回一个文档,其中participant_ids是一个空列表,但mongodbshell则相反。在

我不知道为什么会这样,看来我一定是犯了一个简单但根本的错误。在


Tags: from文档pydevtestimportidids
0条回答
网友
1楼 · 发布于 2024-05-23 17:55:22

下一个代码的输出是什么?在

from pymongo import MongoClient
from bson.objectid import ObjectId

client = MongoClient()
db = client['dev_database']
print json.dumps(db.trials.find_one(ObjectId('522f975dc91e273451569942')))
网友
2楼 · 发布于 2024-05-23 17:55:22

问题是我的代码保存了这个文档的一个副本,其中_id的类型是str。e、 g

> db.trials.find()
{ "_id" : ObjectId("522f975dc91e273451569942"), "nurse_id" : "522f975dc91e273451569941", "question_ids" : [ ], "name" : "Test Trial", "clinician_id" : "522f975dc91e273451569940", "arms" : { "Med1" : "", "Placebo" : "" }, "participant_ids" : [ ], "keywords" : [ "abc", "123" ] }
{ "_id" : "522f975dc91e273451569942", "nurse_id" : "522f975dc91e273451569941", "question_ids" : [ ], "name" : "Test Trial", "clinician_id" : "522f975dc91e273451569940", "arms" : { "Med1" : "", "Placebo" : "" }, "participant_ids" : [
        "52325b93c91e274e81f4bdda",
        "52325b93c91e274e81f4bddb",
        "52325b93c91e274e81f4bddc",
        "52325b93c91e274e81f4bddd",
        "52325b93c91e274e81f4bdde"
], "keywords" : [ "abc", "123" ] }

mongodbshell总是返回第二个结果,而测试代码返回第一个结果。不同之处在于,我的代码显式转换为ObjectId,而mongodbshell似乎很乐意先使用str来查找匹配项。在

mongodbshell的结果在_id字段中缺少ObjectId(...)这一事实本应警告我,有些地方出了问题。在

相关问题 更多 >