1

我对 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":"",


{
"friend_id":"",
"friendname":"name"
"friendshipyrs":"yrs"
},

]", }

我想知道在java中使用原始驱动程序而不是morphia遵循的步骤:1.创建这个对象,这样我就有能力:2.获取新服务和朋友并将其附加到服务列表中。

我目前可以添加到顶层,我尝试使用 BasicDBObject、DBList 甚至 ObjectBUilder,但不知道如何附加或推入字段以使用 java 驱动程序创建数组/列表,从10gen 网站上的演示文稿。

此外,希望能够通过单个查询深入说..朋友信息,那么是否建议维护上述结构或将朋友创建为一个类并将类对象放入列表中?我知道点运算符,但我不知道如何通过 java 驱动程序访问类字段。

将非常感谢任何帮助...谢谢

4

2 回答 2

5

首先,每个帖子问一个问题更容易;)

如果有点冗长,使用 java 驱动程序进行更新非常简单:

假设您的 mongo 更新如下所示:

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 还具有 QueryBuilder,可简化查询对象的构建。

完整的 API 文档可以在这里找到:http: //api.mongodb.org/java/2.6.3/

于 2011-07-29T11:32:56.083 回答
1

就像 Remon 所说,我认为使用 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 注释,但我从来没有使用过它。

于 2011-07-30T21:25:46.567 回答