您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關MongoDB中數組如何使用,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
01 數組的使用場景
0101 1:N的包含結構使用數組
0102 單文檔大小限制
02 多種數組操作方式
0201 使用$push 追加數組元素
0202 使用$unwind聚合分離數組元素
數組是MongoDB中最能體現MongoDB嵌套設計思想的數據結構。
從一張MongoDb社區活動的PPT談起,什么場景下適合使用數組?
1:N的包含結構使用數組
比如組織結構中的組與組員1:N的包含結構,就可以使用數組
"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": "服務人員"
},
{
"name": "",
"uid": 1442,
"email": "",
"status": 1,
"edit": ISODate("2017-08-16T00:00:18.685+08:00"),
"scope": 1,
"desc": "服務人員"
}
]
以上的設計,每一組在MongoDB中就是一行,隨著組員增加,每行大小也會隨之增加,所以PPT里說明中有一條 數組元素的上限不大。只要不超過16M即可。相反 如果我們在開發中選用這種集合結構,那么對于整個數據集的大小和單個collection的大小應該有個預先的判斷,或者說總量是可控的,不會太龐大。
可控的文章評論列表,或者是工單更新回復日志都可以使用數組來保存。
多種數組操作方式
在MongoDb中操作數組不是像關系型數據庫那么工整方便,但是不用擔心,是有方法可操作的。
想象這樣的使用場景,文章評論列表,或者是工單更新回復日志使用數組來保存,如何往數組中追加元素?
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的使用過程中,更多的靈活操作,可以借助于操作符命令,查看官方文檔更多的使用案例
元素數組完成后,如何查詢?
假設以下是我們的文檔結構
{
"_id": ObjectId("591be87de28db61328007ca4"),
"name": "醫院綜合體",
"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條件查詢出如下特定的數組元素
{
"strategyid" :1495101761,
"topic" : "cloud"
},
我們需要管道聚合 和$unwind操作符.通過$unwind操作符將文檔的數組節點拆分為單個文檔,并且結合$match查詢特定的數組元素。
$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中數組如何使用了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。