2016-12-31 22 views
0

(CherryPyはフレームワークを使用して)MongoDBのオブジェクトから埋め込まれた値を取得します。私はMongoDBの中で、以下の文書を挿入した

@cherrypyexpose 
def create(self): 
    client = MongoClient() 
    db = client.database_name   
    result = db.users.insert_one({ 
     "email": "[email protected]", 
     "company": { 
      "name": "ABC Company" 
     } 
    }) 

私は今、「ABC社」であるcompany.nameを取得したいと思います。

私は、リレーショナル・データベースに行うように、次の構文「company.name」を使用してこの値を取得することを試みたが、私はこのエラーを取得してい
@cherrypy.expose 
def result(self): 
    client = MongoClient() 
    db = client.database_name   
    cursor = db.users.find({"email":"[email protected]"}) 
    for document in cursor: 
     value = document["company.name"] 
    return value 

"KeyError: 'company.name'"

に正しい構文になりますどのようなMongoで "company.name"を取得しますか?

+0

'デシベル= client.database_name'とDBがある場合は、コレクションが存在する場合、重複などの下にキー場合' db.users.insert_one'は悪いアイデアのCoSで、存在であるべきもう一つのポイントは、 'cursor.db.collection.some_variables.find_one({'_ id': 'エントリ'})'と同じです ''カーソル[db] [コレクション] [some_variable] [エントリ] [いくつかの値] ''だからmongo db複数のコレクション名を許可しないでください(これは有効な 'tree'メソッドではありません)。カーソル[db_name] [collection_name] '挿入、削除、更新 ' – dsgdfg

+1

@dsgdfg [' cursor [db] [collection] 'は' cursor.db.collection'と等しくありません。](http://stackoverflow.com/questions/ 41262707/in-mongoshell-connect-to-my-collection-db-collection-name-return-n) – styvane

+0

True、 'cursor.db'は静的であり、大きなツリーに対しては有用ではありません。さもなければ、項目を検索/書込みするためのロットキーと値を定義する必要があります。ソースdbを変更する場合は、カーソルを閉じて再度開く必要があります。 – dsgdfg

答えて

1

そのmongoドキュメントは標準のネストされたpython辞書として返されます。だから、:

value = document["company.name"] 

value = document["company"]["name"] 
+0

憎しみが嫌になる。私はあなたをアップしました。 –

+0

ハッカーはハックするつもり!ロブありがとう! – Rimo

関連する問題