MongoDB Создание встроенных объектов на Java без морфий. - PullRequest
1 голос
/ 29 июля 2011

Я очень новичок в mongodb и пытаюсь использовать его для разработки. У меня есть концептуальная модель:
User = {"uid": "", "services": "[
{
"ServiceID": "Sid",
"sub_dat": "somedate",
"EXP_DATE": "somedate",
},
{
"ServiceID": "Sid",
"sub_dat": "somedate",
"EXP_DATE": "somedate",
},
{ "ServiceID": "Sid",
"sub_dat": "somedate",
"EXP_DATE": "somedate",
},
]»,
"друзья": "[
{
"friend_id": "",
"friendname": "Название"
"friendshipyrs": "YRS",
}, * * один тысяча двадцать-одна

{
"friend_id": "",
"friendname": "Название"
"friendshipyrs": "YRS"
},

] ", }

Я хотел бы знать шаги, которые нужно выполнить в java с необработанным драйвером, а не morphia, чтобы: 1. создать этот объект, чтобы у меня была возможность: 2. получать и добавлять новые сервисы и друзей в списки сервисов.

В настоящее время я могу добавить на верхний уровень, и я пытался использовать BasicDBObject, DBList и даже ObjectBUilder, но не мог понять, как добавить или вставить в поля для создания массивов / списков с помощью драйвера Java, как это может быть видно из презентаций на сайте 10gen.

Кроме того, хотите иметь возможность детализировать, чтобы сказать .. информацию о друге с помощью одного запроса, поэтому будет ли целесообразно сохранить структуру выше или создать друзей как класс и поместить объекты класса в список? Я знаю об операторе точки, но я не знаю, как получить доступ к полям класса через драйвер Java.

Буду очень признателен за любую помощь ... Спасибо

Ответы [ 2 ]

5 голосов
/ 29 июля 2011

Прежде всего, легче задать один вопрос на пост;)

Выполнение обновлений с помощью драйвера 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. API также имеет QueryBuilder, который облегчает построение объекта запроса.

Полную документацию по API можно найти здесь: http://api.mongodb.org/java/2.6.3/

1 голос
/ 31 июля 2011

Как сказал Ремон, я думаю, что было бы неплохо использовать ORM, так как обычно он представляет собой более готовый к работе подход, чем использование собственного. Похоже, вы хотите использовать ссылки на объекты для меня. Используя аннотацию @Reference, я могу «встраивать» объекты в другой объект, а затем, после загрузки объекта-владельца, я могу получить доступ к объекту-владельцу (я думаю, что это требует энергичной загрузки). Пример:

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

   @Required
   @Reference
   public Track track;
}

Playlist и Track - две модели, помеченные @Entity, как и этот объект PlaylistItem.

Надеюсь, это поможет.

Больше информации об аннотациях Morphia здесь: http://code.google.com/p/morphia/wiki/AllAnnotations. Существует даже аннотация Embeddd, но мне никогда не приходилось это использовать.

...