2012-08-14 5 views
0

한 문서를 다른 문서로 연결하려고합니다. 그렇게하기 위해 한 문서의 ObjectID를 다른 문서의 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"} 

동일하게 보이지 않아야합니까? 문서를 연결하는 가장 좋은 방법은 무엇입니까?

수정 왜이 질문은 아래로 내려 가고 있습니까?

답변

1

두 가지 결과가 동일합니다. 차이점은 결과를 선택하여 링크 된 필드를 채우는 방법입니다.

find의 두 번째 매개 변수를 사용하여 필드를 반환하면 필드 이름을 키로, 필드 값을 값으로 사용하여 항상 개체를 반환합니다. 연결된 필드를 해당 객체와 동일하게 만들면 연결된 필드의 값으로 ID를 다시 가져 오는 것만은 아닙니다. 첫 번째 쿼리의 결과는 다음과 같습니다.

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

그리고 필드를 동일하게 만듭니다.

또는 두 번째 쿼리에서 실제로 car['_id']을 선택하면 연결된 필드의 값이 ID가됩니다.

이것은 드라이버가 어떻게 값을 반환해야하는지에 대한 해석상의 차이점입니다.

두 번째 방법은 첫 번째 방법이 추가 개체의 형태로 필드에 unnessecary bloat을 추가했기 때문에 최선이라고 말할 수 있습니다.

관련 문제