私は、各文書は次のようになりますしたコレクションを持っている:私はここでそれを簡略化してきましたが、基本的な考え方はあるMongoDBの「アンワインド」ネストされたオブジェクト
{
_id: 'dev_id:datetime_hour',
data: {
0: {
0: {
voltage_a: float,
voltage_b: float,
voltage_c: float,
current_a: float,
current_b: float,
current_c: float,
current_n: float,
active_power_a: float,
active_power_b: float,
active_power_c: float,
total_active_power: float
},
1: {
voltage_a: float,
voltage_b: float,
voltage_c: float,
current_a: float,
current_b: float,
current_c: float,
current_n: float,
active_power_a: float,
active_power_b: float,
active_power_c: float,
total_active_power: float
},
2: {
voltage_a: float,
voltage_b: float,
voltage_c: float,
current_a: float,
current_b: float,
current_c: float,
current_n: float,
active_power_a: float,
active_power_b: float,
active_power_c: float,
total_active_power: float
},
59: {
voltage_a: float,
voltage_b: float,
voltage_c: float,
current_a: float,
current_b: float,
current_c: float,
current_n: float,
active_power_a: float,
active_power_b: float,
active_power_c: float,
total_active_power: float
}
},
1: {
0: {
voltage_a: float,
voltage_b: float,
voltage_c: float,
current_a: float,
current_b: float,
current_c: float,
current_n: float,
active_power_a: float,
active_power_b: float,
active_power_c: float,
total_active_power: float
},
1: {
voltage_a: float,
voltage_b: float,
voltage_c: float,
current_a: float,
current_b: float,
current_c: float,
current_n: float,
active_power_a: float,
active_power_b: float,
active_power_c: float,
total_active_power: float
},
2: {
voltage_a: float,
voltage_b: float,
voltage_c: float,
current_a: float,
current_b: float,
current_c: float,
current_n: float,
active_power_a: float,
active_power_b: float,
active_power_c: float,
total_active_power: float
},
59: {
voltage_a: float,
voltage_b: float,
voltage_c: float,
current_a: float,
current_b: float,
current_c: float,
current_n: float,
active_power_a: float,
active_power_b: float,
active_power_c: float,
total_active_power: float
}
}
}
:センサデータは毎秒保存されているが、同梱されます一緒に1時間。 'data'フィールドは、これらを分で、それぞれの分インデックスを秒でインデックスします。したがって、データの完全な時間価値は、ネストされたデータフィールドの3600エントリになります。例えば、最初の1秒間と3秒間のセンサデータを取得するために、私はオブジェクトに直接アクセスできます:data.1.3
。
このタイプのスキーマはrecommended for storing time series data by MongoDBでした。私のアグリゲーションパイプラインの
ステージ1は次のようになります。
db.raw_electric.aggregate(
[
// Stage 1
{
$match: {
_id: { $regex: /^r10a:/ },
datehour: {$gte: ISODate("2016-09-21T17:00:00"), $lte: ISODate("2016-09-21T19:00:00")}
}
}
]
);
それはアンワインド "ドキュメントすることが可能である - 私は、ネストされた層のそれぞれを公開できるように、配列をほどくと思いますどのように似てオブジェクトの?
'$ unwind'演算子を使用してドキュメントを 'unwind'することはできません。これは配列にのみ適用されます。 – chridam
私はこれを認識しています。そのため、私はこのケースの同等の/代替案を探しています。 –