Bir koleksiyonda saklanan aşağıdaki türde belgelere sahibim.MongoDB Aggregation: İki diziyi birleştir
{
"_id" : "318036:2014010100",
"data": [
{"flow": [6, 10, 12], "occupancy": [0.0356, 0.06, 0.0856], time: 0},
{"flow": [2, 1, 4], "occupancy": [0.01, 0.0056, 0.0422], time: 30},
...
]
}
ben akışı ve doluluk dizide birinci, ikinci, ..., n'inci değerden gelen toplam değeri hesaplamak istiyorum. Dizideki sıra korunmalıdır. Toplamı hesaplamak istediğimi varsayarsak. Sonuç aşağıdaki gibi görünmelidir: Ben sipariş korumaz toplama çerçevesini ama benim şimdiki yaklaşım kullanarak bu çözmeye çalıştı ve çok toplamlar üretir
{
"_id" : "318036:2014010100",
"data": [
{"flow": [6, 10, 12], "occupancy": [0.0356, 0.06, 0.0856], sum: [6.0356, 10.006, 12.00856], time: 0},
{"flow": [2, 1, 4], "occupancy": [0.01, 0.0056, 0.0422], sum: [2.01, 1.0056, 4.0422], time: 30},
...
]
}
.
db.sens.aggregate([
{$match: {"_id":/^318036:/}},
{$limit: 1},
{$unwind: "$data"},
{$unwind: "$data.flow"},
{$unwind: "$data.occupancy"},
{
$group: {
_id: {id: "$_id", time: "$data.time", o: "$data.occupancy", f: "$data.flow", s: {$add: ["$data.occupancy", "$data.flow"]}}
}
},
{
$group: {
_id: {id: "$_id.id", time: "$_id.time"}, occ: { $addToSet: "$_id.o"}, flow: {$addToSet: "$_id.f"}, speed: {$addToSet: "$_id.s"}
}
}
])
Ben toplama çerçevesi ile bu sorunu çözmek mümkün olup olmadığından emin değilim, bu yüzden mapreduce kullanarak bir çözüm de iyi olurdu. İstenilen sonucu nasıl üretebilirim?
Bu https://jira.mongodb.org/browse/SERVER-5919 toplama çerçevesi ile problem çözme engeller inanıyoruz . Öte yandan, haritayı azaltarak bunu yapmak tamamen mümkün. – joao
Şahsen, bir sonuçtan beklediğiniz şey hakkında biraz şaşkınım. "Setleri" sipariş edilmez. CTO öyle diyor ki bu genel bir matematik prensibidir. Tek bir aşamada yapılabildiğinden, "$ group" üzerindeki "dual pump" e gerekli değildir. Orijinal girdinize göre, temel olarak "neye ulaşmak istiyorsunuz?" Açıkça ifade edilmiyor gibi görünüyor. –
2.6 agregasyon çerçevesinde bunu yapmanın bir yolu olduğuna inanmıyorum. Harita/küçültme veya istemci tarafı (ön) işleme düşünün. – wdberkeley