2013-09-01 51 views
1

讓說我獲得的發現結果如下:蒙戈發現 - 與對象的屬性取代的ObjectId時發現

{ "_id" : ObjectId("5221517ad1b328371c000003"), "user_id" : ObjectId("5221517ad1b328371c000001"), "item_id" : ObjectId("5221517ad1b328371c000002"), "preference" : 22 } 

的ObjectId存在不太有意義。有沒有辦法用對象的屬性替換ObjectId?例如。 for user_id - >更改爲用戶名?

+1

這個結果看起來像是以關係方式構建的,這意味着user_id正在存儲可以在另一個集合中找到的objectid?我的假設是否正確? – ermagana

+0

是的,你的假設是正確的 – Karan

+1

@Karan你應該再讀一遍關於爲什麼人們使用面向文檔的數據庫。如果您繼續使用關係方式來設計數據在數據庫中的存儲方式,您將無法獲得任何好處。 – outcoldman

回答

2

實際上,您不必將ObjectId用作_id字段的數據類型。可以使用集合_id明確使用例如字符串的任何數據類型:

> db.users.insert({_id: 'johndoe', age: 21}) 
> db.users.insert({_id: 'janedoe', age: 27}) 
> db.users.find({_id: 'janedoe'}) 

{ "_id" : "janedoe", "age" : 27 } 

或整數

db.items.insert({_ ID:1,名稱: 'someitem'})

> db.items.find() 

{ "_id" : 1, "name" : "someitem" } 

只要你能保證它具有獨特的價值:

db.users.insert({_ ID: 'janedoe',年齡:26})

E11000 duplicate key error index: foo.users.$_id_ dup key: { : "janedoe" } 

對於另一方面的ObjectID是有意義的,並且可以被用於獲得文檔創建時間: http://docs.mongodb.org/manual/reference/object-id/