0

Node.js + Mongoose で、コレクション記事でユーザーのコメントを見つけたいです。

デザイン 1:

articles:
{
    ...
    users: ["a@a.com","b@b.com","c@c.com"]
    comments: [
        {email:"a@a.com", comment:"..."},
        {email:"b@b.com", comment:"..."},
        {email:"c@c.com", comment:"..."},
        ...
    ]
}

デザイン 2:

articles:
{
    ...
    comments: [
        {email:"a@a.com", comment:"..."},
        {email:"b@b.com", comment:"..."},
        {email:"c@c.com", comment:"..."},
        ...
    ]
}

私はデザイン 1 を使用しています。最初に {users:req.query.user} を見つけ、次に結果からユーザーのコメントを取得します。でも賢くない気がする。解決策 2 のような方法はありますか。データベース クエリの書き方がわかりません。

4

1 に答える 1

0

2 番目の構造に対するクエリは、実際には同じように単純です。mongo シェルでは次のようになります。

db.collection_name.find({'comments.email': 'a@a.com'})

クエリ エンジンは、その配列をイントロスペクトし、要件を満たすドキュメントを返すのに十分なほどスマートです。

その時点から、アプリケーション コード内のコメントを反復処理し、一致する電子メールを含むコメントを抽出するだけで済みます。これがデータの構造化方法である場合、クエリ時にこの制限を行う必要はありません。必要に応じてすべてのコメントをループします。

結果セットを特定のユーザーのコメントのみに制限することが重要な場合は、オブジェクトをより関連性の高いもの (記事コレクションに関連する各コメントのドキュメントなど) に構造化する方法を再考する方法があります。ルックアップの可能性に関して重要な値とは何かという観点からスキーマを検討し、可能な場合はそれらにインデックスを付けます。

于 2013-01-04T01:42:50.437 に答える