在没有morphia的Java中创建MongoDB Embedded对象.

deV*_*oDE 1 java mongodb mongodb-java

我是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 ",
},
]",
"friends":"[
{
"friend_id":"",
"friendname":"name"
"friendshipyrs":"yrs",
},

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

],",}

我想知道java中使用原始驱动程序而不是morphia来遵循的步骤:1.创建此对象,以便我能够:2.获取并将新服务和朋友附加到服务列表.

我现在可以添加到顶层,我尝试使用BasicDBObject,DBList,甚至是ObjectBUilder但是无法弄清楚如何追加或推入字段以使用java驱动程序创建数组/列表,如可以从10gen网站上的演示文稿.

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

对任何帮助都会非常感激...谢谢

Rem*_*iet 5

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

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

说你的mongo更新看起来像:

db.users.friends({_id: <someuserid>}, {$push:{friends:{friend_id:...., friendname: ....}}})
Run Code Online (Sandbox Code Playgroud)

您在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);
Run Code Online (Sandbox Code Playgroud)

请原谅任何错字,我实际上没有语法检查这个或任何东西,但它应该让你开始.值得注意的是,在用Java编写之前能够在shell中执行这些操作非常重要.API als具有QueryBuilder,可以简化查询对象的构建.

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