欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mongodb實現(xiàn)數(shù)組對象求和方法實例

 更新時間:2019年01月22日 08:33:23   作者:洪加煌  
這篇文章主要給大家介紹了關于mongodb實現(xiàn)數(shù)組對象求和的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

mongodb在計算集合數(shù)組值時候,我們通常會想到使用$group與$sum,但是如果是數(shù)組里面多個json對象,并且還需要根據(jù)條件過濾多個對象的內容該如何處理?

現(xiàn)在讓我們來實現(xiàn)它,假設mongodb中有個user集合,其數(shù)據(jù)內容如下:

/* 1 */
{
 "_id" : ObjectId("5c414a6a0847e00385143003"),
 "date" : "2019-01-18 09",
 "data" : [ 
 {
  "app_platform" : "ios",
  "user" : 3028
 }, 
 {
  "app_platform" : "android",
  "user" : 4472
 }, 
 ]
}
...

現(xiàn)在我們需要計算date日期為"2019-01-18 09"并且app_platform的類型為"ios"的user總數(shù)

如果可以,請先思考下mongodb語句如何實現(xiàn)。

實現(xiàn)過程中有個執(zhí)行非常重要,即$unwind,官方解釋:

Deconstructs an array field from the input documents to output a document for each element. Each output document is the input document with the value of the array field replaced by the element.

從輸入文檔中解構一個數(shù)組字段,為每個元素輸出一個文檔。每個輸出文檔都是輸入文檔,數(shù)組字段的值由元素替換。

于是我們便想到將data數(shù)組對象分條拆開,化繁為簡,mongodb語句如下:

db.getCollection('user').aggregate([
 {
 $project: { _id: 1, data: 1, date: 1}
 },
 { 
 $match: {"date": "2019-01-18 09"}
 }, 
 {
 $unwind: "$data"
 },
])

得到結果如下:

/* 1 */
{
    "_id" : ObjectId("5c414a6a0847e00385143003"),
    "date" : "2019-01-18 09",
    "data" : {
        "app_platform" : "ios",
        "user" : 3028
    }
}
/* 2 */
{
    "_id" : ObjectId("5c414a6a0847e00385143003"),
    "date" : "2019-01-18 09",
    "data" : {
        "app_platform" : "android",
        "user" : 4472
    }
}

可以看到數(shù)據(jù)由數(shù)組變成了多條文檔數(shù)據(jù),于是問題轉變?yōu)橛嬎憬Y果的user總數(shù),是不是覺得問題變簡單了,而且我們也可以繼續(xù)使用$match來過濾app_platform數(shù)據(jù),mongodb語句如下:

db.getCollection('user').aggregate([
 {
 $project: { _id: 1, data: 1, date: 1}
 },
 { 
 $match: {"date": "2019-01-18 09"}
 }, 
 {
 $unwind: "$data"
 },
 {
 $match: {
 "data.app_platform": { $in: ["ios"]}
 },
 }
])

執(zhí)行結果如下:

/* 1 */
{
    "_id" : ObjectId("5c414a6a0847e00385143003"),
    "date" : "2019-01-18 09",
    "data" : {
        "app_platform" : "ios",
        "user" : 3028
    }
}

可以看到數(shù)據(jù)已經(jīng)被過濾了,如果自信觀察兩個$match的作用可以發(fā)現(xiàn),mongodb是按順序執(zhí)行的,即$match作用于其前面的操作結果集合

讓我們繼續(xù)計算,此時只需要使用group與​sum對data里的user字段求和即可,mongodb語句如下:

db.getCollection('user').aggregate([
 {
 $project: { _id: 1, data: 1, date: 1}
 },
 { 
 $match: {"date": "2019-01-18 09"}
 }, 
 {
 $unwind: "$data"
 },
 {
 $match: {
 "data.app_platform": { $in: ["ios"]}
 }
 },
 {
 $group: { _id: null, "user": {$sum: "$data.user"}}
 }
])

結果如下:

/* 1 */
{
    "_id" : null,
    "user" : 7500
}

計算得出的user即我們所需要的數(shù)據(jù)。

其實所有的難點如下:

  • 計算數(shù)組對象數(shù)據(jù)時將其轉變?yōu)槎鄺l簡單的數(shù)據(jù)格式,$unwind指令將問題輕松得降低了難度
  • mongodb的執(zhí)行順序,$project,$match都是順序執(zhí)行并作用于之前的操作結果

理解了這兩點,相信再難的mongodb語句你也能實現(xiàn)。

happy coding!

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關文章

  • MongoDB游標超時問題的4種解決方法

    MongoDB游標超時問題的4種解決方法

    這篇文章主要給大家介紹了關于MongoDB游標超時問題的4種解決方法,文中通過示例代碼介紹的非常詳細,對大家學習或者使用MongoDB具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-09-09
  • 對標mongodb存儲類JSON數(shù)據(jù)文檔統(tǒng)計分析詳解

    對標mongodb存儲類JSON數(shù)據(jù)文檔統(tǒng)計分析詳解

    這篇文章主要介紹了對標mongodb存儲類JSON數(shù)據(jù)文檔統(tǒng)計分析,只是介紹了簡單的查詢,其實針對各種統(tǒng)計分析場景,clickhouse提供了超級多的統(tǒng)計分析函數(shù)、窗口函數(shù)等等,當然針對數(shù)組的數(shù)據(jù)類型也有很多的統(tǒng)計分析函數(shù),需要的朋友可以參考下
    2022-06-06
  • Spring Boot中使用MongoDB數(shù)據(jù)庫的方法

    Spring Boot中使用MongoDB數(shù)據(jù)庫的方法

    MongoDB是一個高性能,開源,無模式的,基于分布式文件存儲的文檔型數(shù)據(jù)庫,由C++語言編寫,其名稱來源取自“humongous”,是一種開源的文檔數(shù)據(jù)庫──NoSql數(shù)據(jù)庫的一種。這篇文章主要介紹了Spring Boot中使用MongoDB數(shù)據(jù)庫的方法,需要的朋友可以參考下
    2017-12-12
  • mongodb監(jiān)控工具mongostat的使用及命令詳解

    mongodb監(jiān)控工具mongostat的使用及命令詳解

    mongostat是mongodb自帶的狀態(tài)檢測工具,在命令行下使用,會間隔固定時間獲取mongodb的當前運行狀態(tài),并輸出,本文講述了mongodb監(jiān)控工具mongostat的使用及命令詳解
    2018-03-03
  • MongoDB中如何使用JOIN操作詳解

    MongoDB中如何使用JOIN操作詳解

    相信大家都知道m(xù)ongodb是不支持join操作的,因此我們只能自己來實現(xiàn)這個功能。所以下面這篇文章主要給大家介紹了關于在MongoDB中如何使用JOIN操作的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友們下面來一起看看吧。
    2017-07-07
  • 大數(shù)據(jù)環(huán)境下mongoDB為何要加索引淺析

    大數(shù)據(jù)環(huán)境下mongoDB為何要加索引淺析

    這篇文章主要給大家介紹了關于大數(shù)據(jù)環(huán)境下mongoDB為何要加索引的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用mongoDB具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-05-05
  • mongoDB 多重數(shù)組查詢(AngularJS綁定顯示 nodejs)

    mongoDB 多重數(shù)組查詢(AngularJS綁定顯示 nodejs)

    這篇文章主要介紹了mongoDB 多重數(shù)組查詢(AngularJS綁定顯示 nodejs),需要的朋友可以參考下
    2017-06-06
  • MongoDB教程之入門基礎知識

    MongoDB教程之入門基礎知識

    這篇文章主要介紹了MongoDB教程之入門基礎知識,本文講解了文檔的注意事項、使用多個集合的必要性、集合的命名注意事項、數(shù)據(jù)庫、MongoDB的啟動、Shell的使用小技巧等內容,需要的朋友可以參考下
    2015-05-05
  • mongoDB實現(xiàn)分頁的方法

    mongoDB實現(xiàn)分頁的方法

    這篇文章主要為大家詳細介紹了mongoDB實現(xiàn)分頁的兩種方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • MongoDB.NET 2.2.4驅動版本對Mongodb3.3數(shù)據(jù)庫中GridFS增刪改查

    MongoDB.NET 2.2.4驅動版本對Mongodb3.3數(shù)據(jù)庫中GridFS增刪改查

    這篇文章主要為大家詳細介紹了使用MongoDB.NET 2.2.4驅動版本對Mongodb3.3數(shù)據(jù)庫中GridFS增刪改查,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11

最新評論