私はMongoDBの初心者なので、この質問に明らかな答えがある場合はご容赦ください...
環境:
MongoDB docsの例に従って、map-reduce を使用して階層的な集約を実装しました。この例では、「複合」_id
フィールドを map-reduce キーとして使用して、次のような集約ドキュメントを生成します...
{
_id: { u: "rick", d: ISODate("2010-10-10T14:00:00Z") },
value: {
ts: ISODate('2010-10-10T15:01:00Z'),
total: 254,
count: 10,
mean: 25.4 }
}
これはすべて順調です。私の特定のユースケースでは、いくつかの同様のキーの値が各map
ステップで発行される必要があります。例えば...
{
_id: { u: "rick", d: ISODate("2010-10-10T14:00:00Z"), hobby: "wizardry" },
value: {
ts: ISODate('2010-10-10T15:01:00Z'),
total: 254,
count: 10,
mean: 25.4 }
}
{
_id: { u: "rick", d: ISODate("2010-10-10T14:00:00Z"), gender: "male" },
value: {
ts: ISODate('2010-10-10T15:01:00Z'),
total: 254,
count: 10,
mean: 25.4 }
}
(値は同じですが、_id
キーが少し異なります。)
これもまたうまい。
質問:
ここで、いくつかの異なる複合フィールドを持つドキュメントを含む階層コレクション (ビュー) を集約したいと思いますが、 ingフィールド_id
を持つドキュメントのみを集約します。たとえば、 typeを持つドキュメントのみ、またはofを持つドキュメントのみを集計したいと思います。$match
_id
{u: String, d: Date, hobby: String}
_id
_id
{u: String, d: Date}
$exists
演算子を使用して、許可するフィールドと許可しないフィールドを制限できることは承知していますが、それぞれ(潜在的に多数)_id
に対して個別の集計を作成する必要はありません。_id
$match
ドキュメントを集約内の特定のフィールドを含む (または含まない) ドキュメントにプログラムで制限する簡単な方法はありますか?