我对mongodb很新,并尝试用它来开发。
我有一个概念模型:
User = {“uid”:“”,“services”:“[
{
“服务ID”: “SID”,
“sub_dat”: “somedate”,
“EXP_DATE”: “somedate”,
},
{
“服务ID”: “SID”,
“sub_dat”: “somedate”,
“EXP_DATE”: “somedate”,
},
{
“服务ID”: “SID”,
“sub_dat”: “somedate”,
“EXP_DATE”: “somedate”,
},
]”,
“朋友”:“[
{
“friend_id”: “”,
“FRIENDNAME”: “名”
“friendshipyrs”: “年”,
},
{
“friend_id”: “”,
“FRIENDNAME”: “名”
“friendshipyrs”: “年”
},
]“,
}
我希望知道java中使用原始驱动程序而不是morphia来执行的步骤: 1.创建这个对象,这样我就有能力: 2.获取并将新服务和朋友附加到服务列表中。
我目前可以添加到顶层,我尝试使用BasicDBObject,DBList,甚至是ObjectBUilder但是无法弄清楚如何追加或推入字段来创建带有java驱动程序的数组/列表。从10gen网站上的演示中看到。
此外,希望能够通过单个查询深入了解...朋友信息,那么建议维护上述结构或创建朋友作为类并将类对象放在列表中是可取的吗?我知道点运算符,但我不知道如何通过java驱动程序访问类字段。
对任何帮助都会非常感激...... 谢谢
答案 0 :(得分: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 als具有QueryBuilder,可以简化查询对象的构建。
可以在此处找到完整的API文档:http://api.mongodb.org/java/2.6.3/
答案 1 :(得分:1)
就像Remon说的那样,我认为使用ORM是一个好主意,因为它通常会提供一种更适合生产的方法而不是滚动自己的方法。听起来你想对我使用对象引用。通过使用@Reference注释,我能够在另一个对象中“嵌入”对象,然后一旦我加载了拥有对象,我就可以访问拥有的对象(我认为这使用了预先加载)。一个例子:
@Entity public class PlaylistItem extends SomeModel{
@Required
@Reference
public Playlist playlist;
@Required
@Reference
public Track track;
}
播放列表和曲目是两个使用@Entity注释的模型,就像这个PlaylistItem对象一样。
希望这有帮助。
有关Morphia注释的更多信息,请访问:http://code.google.com/p/morphia/wiki/AllAnnotations。甚至有一个Embeddd注释,但我从来没有使用它。