2011-07-29 71 views
1

我對mongodb非常陌生,並嘗試將其用於開發。 我的概念模型:
用戶= { 「UID」: 「」, 「服務」: 「[
{
」服務ID「:」 SID 「
」sub_dat「:」 somedate 」
「EXP_DATE」: 「somedate」
},
{
「服務ID」: 「SID」,
「sub_dat」: 「somedate」
「EXP_DATE」: 「somedate」
},
{ 「服務ID」: 「SID」,
「sub_dat」: 「somedate」
「EXP_DATE」: 「somedate」,
},
] 「
」朋友「: 」[
{
「friend_id」:「」,
「FRIENDNAME」: 「名」
「friendshipyrs」: 「年」,
},在沒有morphia的Java中創建MongoDB嵌入式對象。

{
「friend_id」: 「」,
「FRIENDNAME」: 「名」
「friendshipyrs」: 「年」
},

]」,}

我想知道在java中使用原始驅動程序(而不是morphia)遵循的步驟: 1.創建此對象,以便我有以下能力: 2.獲取並追加新服務和好友服務列表。

我目前可以添加到頂級,我嘗試使用BasicDBObject,DBList,甚至是ObjectBUilder,但無法弄清楚如何追加或推入到字段中創建數組/列表與java驅動程序可以從10gen站點的演示中可以看出。

此外,希望能夠向下鑽取說一個單一的查詢的朋友信息,所以這將是明智的保持上述結構或創建朋友作爲一個類,並將類對象放在列表中?我知道點運算符,但我不知道如何通過java驅動程序訪問類字段。

對任何幫助都非常有幫助... 謝謝

回答

5

首先,它更容易讓每交一個問題;)

做與Java驅動程序的更新是非常簡單的,如果有點冗長:

說你的蒙戈更新會是什麼樣子:

db.users.friends({_id: <someuserid>}, {$push:{friends:{friend_id:...., friendname: ....}}}) 

所有你必須用Java做的就是創建一個封裝了一個更新DBOBJECT,所以在這種情況下:

DBObject query = new BasicDBObject("_id", <someuserid>); 

DBObject newFriend = new BasicDBObject("friend_id", ...); 
newFriend.put("friendname", ....); 

DBObject update = new BasicDBObject("$push", new BasicDBObject("friends", newFriend)); 

DBCollection col = db.getCollection("users"); 

col.update(query, update); 

對不起,我沒有實際的語法檢查這個或任何東西,但它應該讓你開始。值得注意的是,在Java中嘗試它之前,能夠在shell中執行這些操作是很重要的。 API als具有查詢對象構建簡化的QueryBuilder。

完整的API文檔可以在這裏找到:http://api.mongodb.org/java/2.6.3/

+1

作爲一個小的P.S.,使用某種ORM庫幾乎總是一個好主意,而不是直接使用Java驅動程序,因爲它使代碼難以閱讀並過於冗長。你是否有任何理由積極避免Morphia等? –

+0

Thax非常多Remon,剛注意到響應...會試用它並讓你知道。我真的很感激。 – deVIAntCoDE

+0

林猜測我應該創建服務和朋友作爲一個類對象和$推實例,然後檢索字段與點運算符...... 我避免morphia(現在),因爲我想得到一個什麼是掛先引擎蓋下。另外我讀到,管理嵌入式對象通過morphia有點難度。猜猜我害怕,因爲我希望儘可能多的數據靈活性。 哦,我會做得很好,下一次每個帖子要問1個問題:-) – deVIAntCoDE

1

像雷蒙說,我認爲這是一個好主意,去與ORM,因爲它通常表現爲比滾動自己更加生產就緒的做法。這聽起來像你想使用對象引用給我。通過使用@Reference註解,我可以將對象「嵌入」到另一個對象中,然後一旦我加載了擁有對象,就可以訪問擁有的對象(我認爲這是使用急切加載)。舉個例子:

@Entity public class PlaylistItem extends SomeModel{ 
    @Required 
    @Reference 
    public Playlist playlist; 

    @Required 
    @Reference 
    public Track track; 
} 

播放列表和軌道兩種型號爲@Entity註釋,就這樣PlaylistItem對象。

希望這會有所幫助。

更多關於Morphia註釋的信息在這裏:http://code.google.com/p/morphia/wiki/AllAnnotations。甚至有一個Embeddd註釋,但我從來沒有使用過。