2013-02-27 67 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" 
    } 
    } 
]) 

我希望你觉得这有帮助。