Ubah beberapa array menjadi satu array di MongoDB, hapus juga nilai Tidak Ada dari Array
Nov 09 2020
Struktur Array Mongo DB:
{
"time" :[
[2018-12-18T20:16:28.800Z , 2018-12-18T20:16:28.800Z, 2016-11-14T10:16:32.700Z],
[2016-11-14T10:16:32.700Z, 2017-09-17T11:16:54.500Z, 2018-12-18T20:16:28.800Z],
[2017-09-17T11:16:54.500Z, 2018-12-18T20:16:28.800Z, 2016-11-14T10:16:32.700Z]
],
"bar": [
[2,5,9,8],
[6,3,7,None],
[7,8,None]
]
}
Output yang diharapkan dengan satu larik tanpa nilai None:
"time" :[
2018-12-18T20:16:28.800Z,
2018-12-18T20:16:28.800Z,
2016-11-14T10:16:32.700Z,
2016-11-14T10:16:32.700Z,
2017-09-17T11:16:54.500Z,
2017-09-17T11:16:54.500Z,
2016-11-14T10:16:32.700Z
],
"bar": [
2,
5,
9,
6,
3,
7,
8
]
}
Saya menggunakan Mongodb 4.2, dan ingin mengubah beberapa array menjadi satu array, tanpa $unwind. Karena itu mengurangi kinerja dalam kasus saya.
Jawaban
1 turivishal Nov 09 2020 at 08:37
Anda dapat mencoba,
- waktu,
$reduceuntuk mengulang perulangan waktu dan$concatArraysmenggabungkan array - bar,
$reduceuntuk mengulang loop dari bar dan$concatArraysuntuk menggabungkan array dan mendapatkan nilai unik,$filteruntuk mengulang loop dari array yang diperbarui dari$reducedan menghapusNonenilai dari array itu
db.collection.aggregate([
{
$project: { time: { $reduce: {
input: "$time", initialValue: [], in: { $concatArrays: ["$$value", "$$this"] }
}
},
bar: {
$filter: { input: { $reduce: {
input: "$bar", initialValue: [], in: { $concatArrays: ["$$value", "$$this"] }
}
},
cond: { $ne: ["$$this", "None"] }
}
}
}
}
])
Tempat bermain
Taylor Sheridan Baru Menambahkan 1 Bintang 'Yellowstone' Favoritnya ke Pemeran 'Lawmen: Bass Reeves'