3

Mongo セットアップ内に何百万もの Subscriber レコードを保存しています。私は、記録にフロント エンドを配置して、それらを検索できるようにする任務を負っています。私の検索クエリは見栄えがしますが、それらを並べ替えてページングできるようにする必要があります。私たちの Mongo 設計は、チャネル情報が配列に入れ子になっているようなものです。メールがアドレスを持つ唯一のチャネルであるため、「Channels.Address」でソートしようとしましたが、そのようには機能しません。昇順か降順かに関係なく、同じ順序で結果が返されます。

私たちのコレクションは次のようになります。

加入者:

{
  "_id" : "",
  "FirstName" : "Tester",
  "LastName" : "Tester",
  "Channels" : [{
      "_t" : "EmailChannel",
      "IsEnabled" : true,
      "Type" : 1,
      "Address" : "test@test.com"
    }, {
      "_t" : "SmsChannel",
      "IsEnabled" : true,
      "Type" : 2,
      "Number" : "88888888"
    }, {
      "_t" : "FaxChannel",
      "IsEnabled" : false,
      "Type" : 4,
      "Number" : null
    }]
}

私の現在の考えは、必要なものを返す MapReduce を作成し、これの代わりにそれを検索することです。しかし、それを行うのはスペースの無駄のようです。使用頻度の高いテーブルなので、eval は使えません。誰か提案はありますか?

4

2 に答える 2

1

私の知る限り、mongodbのネストされた配列をソートする方法はありません。

C#ソートを使用して独自のコードで実行することも、AggregationFrameworkhttp ://docs.mongodb.org/manual/applications/aggregation/を試すこともできます。プロジェクトを「再作成」し、チャンネルを巻き戻し、並べ替えて、再グループ化する必要があります。これでうまくいくと思います!

于 2013-03-12T20:25:09.980 に答える
1

という名前のフィールドを追加しますsort。ソートしたいキーが何であれ、そのフィールドに保存します。インデックスを付けて、並べ替え順序として使用します。

ドキュメント データベースを操作する場合、この方法でデータを非正規化する必要がある場合があります。多くの場合、キーを小文字に変換したり、特定の文字を削除したりして、正確な要件を満たす順序 (または検索フィールド) を作成したり、もちろんすべての「保存」および「更新」したりする必要があります。コードはこの追加フィールドを維持する必要があります。

並べ替えを試すこともできChannels.0.Addressますが、それは配列がかなり壊れやすい特定の順序にとどまっていることを前提としています。

于 2013-03-12T20:31:05.527 に答える