我在 mongoDB 中有一些資料,我想在物件鍵值中對它進行分組和求和:
{
'_id': '1',
'value': {
A: 1,
B: 2,
C: 3
}
},
{
'_id': '2',
'value': {
B: 2,
C: 3
}
}
我需要按鍵名分組并對每個鍵的值求和 - 該值。對于上面的示例,結果將是:
{
'_id': 'A',
'total': 1
},
{
'_id': 'B',
'total': 4
},
{
'_id': 'C',
'total': 6
}
uj5u.com熱心網友回復:
詢問
- 如果這些欄位(A,B,C)是未知的,我們必須使它的模式是穩定的,所以我們可以按一個公共欄位分組,所以
object to array使用 - 展開以使陣列成員分隔檔案
- 對值進行分組和求和
*如果您的欄位未知,則不是好主意,最好知道架構,即使某些欄位可能丟失,但不知道架構會在查詢時導致很多問題
玩蒙哥
aggregate(
[{"$set": {"value": {"$objectToArray": "$value"}}},
{"$unwind": "$value"},
{"$group": {"_id": "$value.k", "count": {"$sum": "$value.v"}}}])
uj5u.com熱心網友回復:
這是使用 PHP 執行此操作的方法,我不確定是否有更有效的方法可以在資料庫級別執行此操作。但這可以解決問題,您可能需要先用引號括起您的 json 鍵(“A”:而不是 A :)
<?php
$json_string = '
[{
"_id": "1",
"value": {
"A": 1,
"B": 2,
"C": 3
}
},
{
"_id": "2",
"value": {
"B": 2,
"C": 3
}
}]';
function groupByKeys($json_string) {
// convert json_string to an array
$json_array = json_decode($json_string, true );
$result = array();
foreach ($json_array as $key => $value) {
foreach ($value['value'] as $key2 => $value2) {
if (isset($result[$key2])) {
$result[$key2] = $value2;
} else {
$result[$key2] = $value2;
}
}
}
return $result;
}
echo json_encode(groupByKeys($json_string));
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/527363.html
下一篇:滿足條件時如何替換陣列物件
