2013-02-27 41 views
0

我已經開始搗鼓mongo db並提出了一個問題。 說,我有一個對象(PO​​JO)帶有一個id字段(稱爲'ID'),我想用JSON表示並在Mongo DB中存儲/加載/加載。 據我瞭解,任何對象總是有_id字段(帶下劃線,小寫)。 我想要做的是:在查詢過程中,我希望mongo數據庫將字段ID而不是_id返回給我的JSON。 在SQL我會使用類似mongo db中的別名

SELECT _id as ID ...

我的問題是它是否能夠做到這一點蒙戈分貝,如果是,基於Java的例子是非常讚賞:)

我理解它可能遍歷記錄並手動替換帶ID的_id,但我不想要這個O(n)循環。 我也不真的要重複行和存儲「id」和「_id」 所以我正在尋找解決方案在查詢或Java驅動程序的水平。

在此先感謝,並有一個愉快的一天

回答

0

我已經結束了使用以下方法在Java驅動程序類似於下面的代碼:

DBCursor cursor = runSomeQuery(); 
try { 
     while(cursor.hasNext()) { 
      DBObject dbObject = cursor.next(); 
      ObjectId id = (ObjectId) dbObject.get("_id"); 
      dbObject.removeField("_id"); 
      dbObject.put("ID", id.toString()); 
      System.out.println(dbObject); 
     } 

    } finally { 
     cursor.close(); 
    } 

我想知道這是最好的解決方案,還是我有其他更好的選擇 馬克

0

MongoDB的犯規利用SQL,它更像對象查詢語言和收藏。

你可以嘗試是,有些東西用蒙戈Java驅動程序

Pojo obj = new PojoInstance(); 
obj.setId(id); 
db.yourdb.find(obj); 
+0

謝謝我知道mongo不能用於SQL,我只是說如果我使用SQL和一些RDBMS服務器,我會做上述選擇。我無法從建議的解決方案中理解mongo db如何與對象一起工作(我猜你的意思是Spring Data方法,如果我沒有弄錯,他們有一個明確的@Id註釋),我正在使用Mongo Java驅動程序解決方案。儘管謝謝你的回答! – 2013-02-27 18:21:01

0

下面是我在Javascript中做的一個例子。這可能對您有所幫助。在我的情況下,我將刪除_id字段並假名兩個非常嵌套的字段以顯示更簡單的名稱。

db.players.aggregate([ 
    { $match: { accountId: '12345'}}, 
    { $project: { 
    "_id": 0, 
    "id": "$id", 
    "masterVersion": "$branches.master.configuration.player.template.version", 
    "previewVersion": "$branches.preview.configuration.player.template.version" 
    } 
    } 
]) 

我希望你覺得這有幫助。