2012-08-14 59 views
0

我試圖將一個文檔鏈接到另一個文檔。爲此,我試圖在另一個文件中存儲一個文檔的ObjectID。我嘗試了幾種應該產生相同結果的不同方式,但實際上看起來不同。這裏有我想要的方式:爲什麼我會針對類似查詢得到2個不同的結果?

方法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膨脹到額外的對象形式的領域。

相關問題