2

割り当てのために monogdb をいじっていますが、次の問題に遭遇しました: によって返されるドキュメントが によって返されるpymongoものと一致しませんmongoc。シンプル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')}))

念のため、両方の方法で行います。これは以下を返します:

{u'nurse_id': u'522f975dc91e273451569941', u'question_ids': [], u'name': u'Test Trial', u'clinician_id': u'522f975dc91e273451569940', u'arms': {u'Med1': u'', u'Placebo': u''}, u'participant_ids': [], u'keywords': [u'abc', u'123'], u'_id': ObjectId('522f975dc91e273451569942')}
[{u'nurse_id': u'522f975dc91e273451569941', u'question_ids': [], u'name': u'Test Trial', u'clinician_id': u'522f975dc91e273451569940', u'arms': {u'Med1': u'', u'Placebo': u''}, u'participant_ids': [], u'keywords': [u'abc', u'123'], u'_id': ObjectId('522f975dc91e273451569942')}]

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が、MongoDB シェルはそうではありません。

これがなぜなのかわかりませんが、どこかで単純ではあるが根本的な間違いを犯しているに違いないようです。

4

2 に答える 2

2

問題は、私のコードがこのドキュメントの複製を保存したことであることが判明しまし_idstr。例えば

> 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" ] }

MongoDB シェルは常に 2 番目の結果を返しますが、テスト コードは最初の結果を返します。違いは、私のコードは明示的に にキャストするのに対し、MongoDB Shell は最初ObjectIdに使用して一致を見つけようとして喜んでいるようです。str

MongoDB Shell の結果がフィールドに欠けていたという事実は、ObjectId(...)何か_idが間違っていると警告する必要がありました。

于 2013-09-13T09:38:03.260 に答える