2013-02-27 2 views
0

Я начал возиться с mongo db и придумал вопрос. Скажем, у меня есть объект (POJO) с полем id (скажем, с именем ID), который я хотел бы представлять в JSON и хранить/загружать в/из Mongo DB. Насколько я понял, у любого объекта всегда есть поле _id (с подчеркиванием, нижним). Что я хотел бы сделать: во время запроса я хотел бы, чтобы mongo db вернул мне мой JSON с идентификатором поля вместо _id. В SQL Я хотел бы использовать что-то вродеalias in mongo db

SELECT _id as ID ...

Мой вопрос, является ли его можно сделать это в Монго дб, и если да, то на основе Java в качестве примера будет очень признателен :)

I понять, что его можно перебирать по записям и вручную подставлять идентификатор _id, но я не хочу этого цикла O (n). Я также не хочу дублировать строки и хранить как «id», так и «_id» Так что я ищу решение на уровне запроса или, возможно, Java Driver.

Заранее спасибо и есть хороший день

ответ

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(); 
    } 

Я интересно, это лучшее решение, или у меня есть другие лучшие варианты. Mark

0

MongoDB использовать оленью кожу SQL, его больше как Object Query Language и коллекции.

, что вы можете попробовать это, некоторые вещи похожи ниже код, используя Монго Java Driver

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

Спасибо, я знаю, что mongo не работает с SQL, я просто заявил, что если бы я использовал SQL и некоторый сервер RDBMS, я бы сделал вышеупомянутый select. Я не мог понять из предлагаемого решения, как именно mongo db работает с объектами (я думаю, вы имеете в виду подход Spring Data, у них есть явная аннотация @Id, если я не ошибаюсь), и я использую решение для драйверов Mongo Java. Спасибо за ответ, хотя! –

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" 
    } 
    } 
]) 

Надеюсь, вы найдете это полезным.