溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MongoDB中數(shù)組如何使用

發(fā)布時間:2021-08-12 15:35:45 來源:億速云 閱讀:158 作者:Leah 欄目:大數(shù)據(jù)

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)MongoDB中數(shù)組如何使用,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

01 數(shù)組的使用場景

    0101  1:N的包含結(jié)構(gòu)使用數(shù)組

    0102  單文檔大小限制

02 多種數(shù)組操作方式

    0201  使用$push 追加數(shù)組元素

    0202 使用$unwind聚合分離數(shù)組元素

 數(shù)組是MongoDB中最能體現(xiàn)MongoDB嵌套設(shè)計思想的數(shù)據(jù)結(jié)構(gòu)。

從一張MongoDb社區(qū)活動的PPT談起,什么場景下適合使用數(shù)組?

MongoDB中數(shù)組如何使用

1:N的包含結(jié)構(gòu)使用數(shù)組

比如組織結(jié)構(gòu)中的組與組員1:N的包含結(jié)構(gòu),就可以使用數(shù)組

"add": ISODate("2017-08-23T17:15:56.173+08:00"),

"agid": 10,組編號

"order": 150,

"user": [

  {

    "name": "",

    "uid": 1240,

    "email": "",

    "status": 1,

    "edit": ISODate("2017-08-16T00:00:18.685+08:00"),

    "scope": 1,

    "desc": "服務(wù)人員"

  },

  {

    "name": "",

    "uid": 1442,

    "email": "",

    "status": 1,

    "edit": ISODate("2017-08-16T00:00:18.685+08:00"),

    "scope": 1,

    "desc": "服務(wù)人員"

  }

]


以上的設(shè)計,每一組在MongoDB中就是一行,隨著組員增加,每行大小也會隨之增加,所以PPT里說明中有一條 數(shù)組元素的上限不大。只要不超過16M即可。相反 如果我們在開發(fā)中選用這種集合結(jié)構(gòu),那么對于整個數(shù)據(jù)集的大小和單個collection的大小應(yīng)該有個預(yù)先的判斷,或者說總量是可控的,不會太龐大。

可控的文章評論列表,或者是工單更新回復(fù)日志都可以使用數(shù)組來保存。

多種數(shù)組操作方式

在MongoDb中操作數(shù)組不是像關(guān)系型數(shù)據(jù)庫那么工整方便,但是不用擔(dān)心,是有方法可操作的。

想象這樣的使用場景,文章評論列表,或者是工單更新回復(fù)日志使用數(shù)組來保存,如何往數(shù)組中追加元素?

The following example appends 89 to the scores array:

db.students.update({_id:1},{$push:{scores:89}})

Use $push with the$each modifier to append  multiple values to the array field.

The following example appends each element of[90,92,85]tothescoresarray for the document where thenamefieldequalsjoe:

db.students.update({name:"joe"},{$push:{scores:{$each:[90,92,85]}}})

在MongoDb的使用過程中,更多的靈活操作,可以借助于操作符命令,查看官方文檔更多的使用案例

元素數(shù)組完成后,如何查詢?

假設(shè)以下是我們的文檔結(jié)構(gòu)

{

  "_id": ObjectId("591be87de28db61328007ca4"),

  "name": "醫(yī)院綜合體",

  "status": 1,

  "create_time": ISODate("2017-05-17T14:06:53.000+08:00"),

  "update_time": ISODate("2017-05-17T14:23:11.000+08:00"),

  "strategies": [

    {

      "strategyid": 1495101761,

      "topic": "cloud"

    },

    {

      "strategyid": 1456101761,

      "topic": "db"

    }

  ]

}

如果我們想通過topic條件查詢出如下特定的數(shù)組元素

{

"strategyid" :1495101761,

"topic" : "cloud" 
},

我們需要管道聚合 和$unwind操作符.通過$unwind操作符將文檔的數(shù)組節(jié)點拆分為單個文檔,并且結(jié)合$match查詢特定的數(shù)組元素。

$mongo=Mongodb::getInstance();

$ops=[

[

'$unwind'=>'$strategies'],

[

'$match'=>[

'strategies.topic'=>$topic

],

[

'$group'=>[

'_id'=>

      ['strategies'=>'$strategies.topic'],

      'strategyid'=>['$push'=>'$strategies.strategyid'],

  ]  ],

];

$collection=$mongo->db->collection;

$data=$collection->aggregate($ops);

return$data['result'];

上述就是小編為大家分享的MongoDB中數(shù)組如何使用了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI