0

あるドキュメントを別のドキュメントにリンクしようとしています。そのために、あるドキュメントの ObjectID を別のドキュメントに保存しようとしています。同じ結果が得られるはずのいくつかの異なる方法を試していますが、実際には異なって見えます。私が試している方法は次のとおりです。

方法 1

owner['ownedCar'] = db.cars.find_one({ '_id' : ObjectId( $theCarsObjectIDstring ) }, {'_id': 1})
db.owners.save(owner)

データベースでは次のようになります。

{ 
_id {"$oid": "502186421fe3321dfa000001"}
} 

および方法 2

car = db.cars.find_one( { '_id' : ObjectId( $theCarsObjectIDstring ) } )
owner['ownedCar'] = car['_id']
db.owners.save(owner)

次のようになります。

{"$oid": "502186421fe3321dfa000001"}

彼らは同じように見えるべきではありませんか?ドキュメントをリンクするための推奨される方法は何ですか?

編集なぜこの質問は反対票を投じているのですか?

4

1 に答える 1

1

これら 2 つの結果は同じです。違いは、リンクされたフィールドにデータを入力するために結果を選択する方法です。

の 2 番目のパラメーターを使用してfindフィールドを返す場合、それが 1 つだけであっても、フィールド名をキーとして、フィールド値を値として持つオブジェクトが常に返されます。リンクされたフィールドをそのオブジェクトと等しくするので、リンクされたフィールドの値としてIDを取得するだけではありません。したがって、最初のクエリの結果は次のようになります。

{ 
_id {"$oid": "502186421fe3321dfa000001"}
} 

そして、あなたはフィールドをそれに等しくします。

car['_id']または、リンクされたフィールドの値が単なる id であるため、2 番目のクエリで物理的に選択しています。

これは、値を返す方法の解釈におけるドライバーと言語の違いです。

最初の方法は余分なオブジェクトの形でフィールドに不必要な肥大化を追加するため、2 番目の方法が最善の方法だと思います。

于 2012-08-14T10:40:16.757 に答える