无morphia的Java MongoDB嵌入式对象创建。
我对mongodb非常陌生,并尝试将其用于开发。 我有一个概念模型:无morphia的Java MongoDB嵌入式对象创建。,java,mongodb,mongodb-java,Java,Mongodb,Mongodb Java,我对mongodb非常陌生,并尝试将其用于开发。 我有一个概念模型: 用户={“uid”:“”“服务”:”[ { “serviceid”:“sid”, “sub_dat”:“somedate”, “exp_date”:“somedate”, }, { “serviceid”:“sid”, “sub_dat”:“somedate”, “exp_date”:“somedate”, }, { “serviceid”:“sid”, “sub_dat”:“somedate”, “exp_date”:“so
用户={“uid”:“”“服务”:”[
{
“serviceid”:“sid”,
“sub_dat”:“somedate”,
“exp_date”:“somedate”,
},
{
“serviceid”:“sid”,
“sub_dat”:“somedate”,
“exp_date”:“somedate”,
},
{
“serviceid”:“sid”,
“sub_dat”:“somedate”,
“exp_date”:“somedate”,
},
]",
“朋友”:[
{
朋友id:“,
“好友姓名”:“姓名”
“友谊年”:“年”,
}
{
朋友id:“,
“好友姓名”:“姓名”
“友谊年”:“年”
}
“,
}”
我想知道在java中使用原始驱动程序(而不是morphia to)执行以下步骤:
1.创建此对象,以便我能够:
2.获取新服务并将其附加到服务列表中
我目前可以添加到顶层,并尝试使用BasicDBObject、DBList,甚至ObjectBUilder,但不知道如何附加或推入字段以使用java驱动程序创建数组/列表,这可以从10gen站点上的演示中看出
同时,希望能够深入地说。。只需一次查询好友信息,那么是否建议保持上述结构或将好友创建为一个类并将类对象放入列表中?我知道点运算符,但不知道如何通过java驱动程序访问类字段
非常感谢您的帮助。。。
谢谢你首先,每个帖子问一个问题更容易;)
使用java驱动程序进行更新非常简单(如果有点冗长):
假设您的mongo更新如下所示:
db.users.friends({_id: <someuserid>}, {$push:{friends:{friend_id:...., friendname: ....}}})
db.users.friends({u id:},{$push:{friends:{friends\u id:..,friendsname:..}})
在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);
DBObject query=newbasicdbobject(“\u id”);
DBObject newFriend=newBasicDBObject(“friend_id”,…);
newFriend.put(“friendname”,…);
DBObject update=newbasicdbobject($push),newbasicdbobject(“friends”,newfriends));
DBCollection col=db.getCollection(“用户”);
col.update(查询、更新);
请原谅我的拼写错误,我实际上还没有检查过这个或任何东西,但它应该可以让你开始。值得注意的是,在Java中尝试之前,能够在shell中完成这些事情是很重要的。API als具有QueryBuilder,它简化了查询对象的构造
完整的API文档可以在这里找到:首先,每个帖子问一个问题比较容易;)
使用java驱动程序进行更新非常简单(如果有点冗长):
假设您的mongo更新如下所示:
db.users.friends({_id: <someuserid>}, {$push:{friends:{friend_id:...., friendname: ....}}})
db.users.friends({u id:},{$push:{friends:{friends\u id:..,friendsname:..}})
在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);
DBObject query=newbasicdbobject(“\u id”);
DBObject newFriend=newBasicDBObject(“friend_id”,…);
newFriend.put(“friendname”,…);
DBObject update=newbasicdbobject($push),newbasicdbobject(“friends”,newfriends));
DBCollection col=db.getCollection(“用户”);
col.update(查询、更新);
请原谅我的拼写错误,我实际上还没有检查过这个或任何东西,但它应该可以让你开始。值得注意的是,在Java中尝试之前,能够在shell中完成这些事情是很重要的。API als具有QueryBuilder,它简化了查询对象的构造
完整的API文档可以在这里找到:正如Remon所说,我认为使用ORM是一个好主意,因为它通常提供了一种比使用自己的方法更适合生产的方法。听起来你想对我使用对象引用。通过使用@Reference注释,我可以将对象“嵌入”到另一个对象中,然后一旦加载了所属对象,我就可以访问所属对象(我认为这使用了即时加载)。例如:
@Entity public class PlaylistItem extends SomeModel{
@Required
@Reference
public Playlist playlist;
@Required
@Reference
public Track track;
}
Playlist和Track是两个用@Entity注释的模型,就像这个playlitem对象一样
希望这有帮助
有关Morphia注释的更多信息,请参见:。甚至还有一个EmbeddedD注释,但我从未使用过它。正如Remon所说,我认为使用ORM是一个好主意,因为它通常提供了一种比使用自己的方法更适合生产的方法。听起来你想对我使用对象引用。通过使用@Reference注释,我可以将对象“嵌入”到另一个对象中,然后一旦加载了所属对象,我就可以访问所属对象(我认为这使用了即时加载)。例如:
@Entity public class PlaylistItem extends SomeModel{
@Required
@Reference
public Playlist playlist;
@Required
@Reference
public Track track;
}
Playlist和Track是两个用@Entity注释的模型,就像这个playlitem对象一样
希望这有帮助
有关Morphia注释的更多信息,请参见:。甚至还有一个Embeddedd注释,但我从来没有使用过它。作为一个小p.S.,使用某种ORM库而不是直接使用Java驱动程序几乎总是一个好主意,因为它会使代码难以阅读,而且过于冗长。你有没有什么理由积极避免莫菲娅之类的事情?Thax非常喜欢Remon,只是注意到了反应。。。我会尝试一下,让你知道。我真的很感激。我猜我应该创建服务和朋友作为类对象和$push实例,然后用点运算符检索字段。。。。。。我现在避免使用morphia,因为我想先弄清楚引擎盖下的东西。我还了解到,通过morphia管理嵌入式对象有点困难。我想这吓了我一跳,因为我想成为