您好,登錄后才能下訂單哦!
這期內(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ù)組?
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è)資訊頻道。
免責(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)容。