私たちは現在 SQL Server 上で実行しているため、MongoDB 集約フレームワークが私たちのニーズにどの程度適合しているかを評価しています。特定のクエリを実行するのに苦労しています:
次の疑似レコードがあるとします (SQL テーブルの列としてモデル化され、mongodb コレクションの完全なドキュメントとしてモデル化されます)。
{
name: 'A',
timespent: 100,
},
{
name: 'B',
timespent: 200,
},
{
name: 'C',
timespent: 300,
},
{
name: 'D',
timespent: 400,
},
{
name: 'E',
timespent: 500,
}
timespent フィールドを範囲にグループ化し、発生をカウントして、たとえば次の疑似レコードを取得します。
results{
0-250: 2,
250-450: 2,
450-650: 1
}
これらの範囲 (250、450、および 650) は動的であり、ユーザーによって時間の経過とともに変更される可能性があることに注意してください。SQL では、次のような結果を抽出しました。
select range, COUNT(*) as total from (
select case when Timespent <= 250 then '0-250'
when Timespent <= 450 then '200-450'
else '450-600' end as range
from TestTable) as r
group by r.range
繰り返しますが、この sql はアプリによって動的に構築され、一度に利用可能な特定の範囲に適合することに注意してください。
そのようなクエリを実行するために、mongodb 集約フレームワークで適切な構造を見つけるのに苦労しています。パイプラインに $match を挿入することで単一の範囲の結果を照会できます (つまり、単一の範囲の結果を取得します) が、単一のパイプライン クエリですべての範囲とそのカウントを抽出する方法を理解できません。