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 "、
}、
]"、
"friends": "[
{
"friend_id ":" "、


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

] "、}

morphiaではなくrawドライバーを使用してJavaで実行する手順を知りたいのですが、次のようにします。1.次の機能を使用できるようにこのオブジェクトを作成します。2。新しいサービスやフレンドをフェッチしてサービスリストに追加します。

現在、トップレベルに追加でき、BasicDBObject、DBList、さらにはObjectBUilderを使用してみましたが、フィールドに追加またはプッシュして、Javaドライバーで配列/リストを作成する方法がわかりませんでした。 10genサイトでのプレゼンテーション。

また、1つのクエリで友達情報をドリルダウンできるようにしたいので、上記の構造を維持するか、クラスとして友達を作成してクラスオブジェクトをリストに入れることをお勧めしますか?ドット演算子は知っていますが、Javaドライバーを介してクラスフィールドにアクセスする方法がわかりません。

どんな助けでもとても素晴らしいでしょう...ありがとう

4

2 に答える 2

5

まず、投稿ごとに 1 つの質問をする方が簡単です ;)

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 で試す前に、これらのことをシェルで実行できることが重要であることに注意してください。API には、クエリ オブジェクトの構築を容易にする QueryBuilder があります。

完全な API ドキュメントは、http: //api.mongodb.org/java/2.6.3/にあります。

于 2011-07-29T11:32:56.083 に答える
1

Remon が言ったように、ORM を使用するのは良い考えだと思います。ORM は通常、自分で作成するよりも本番環境に対応したアプローチを提供するからです。私へのオブジェクト参照を使用したいようですね。@Reference アノテーションを使用することで、別のオブジェクト内にオブジェクトを「埋め込む」ことができ、所有オブジェクトをロードしたら、所有オブジェクトにアクセスできます (これは熱心なロードを使用すると思います)。例:

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

   @Required
   @Reference
   public Track track;
}

Playlist と Track は、この PlaylistItem オブジェクトと同様に、@Entity で注釈が付けられた 2 つのモデルです。

お役に立てれば。

Morphia アノテーションの詳細については、http ://code.google.com/p/morphia/wiki/AllAnnotations をご覧ください。Embeddd アノテーションもありますが、それを使用する必要はありませんでした。

于 2011-07-30T21:25:46.567 に答える