中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

合并 mongodb 子文檔

發布時間:2020-07-18 05:51:10 來源:網絡 閱讀:217 作者:raqsoft 欄目:大數據

來源:https://groups.google.com/forum/#!topic/mongodb-user/BpgEaRqrKsA


【摘要】

????????Mongodb 的 BSON 存儲格式靈活多樣,有助于 MongoDB 的入門學習。有集算器 SPL 語言支持后,Mongodb 能實現像數據 SQL 那樣的方便查詢。

復制摘要

????????MongoDB文檔的存儲格式是BSON,一種類JSON的二進制形式的存儲格式。如果熟悉JSON格式,將非常有助于MongoDB的入門學習,不過和JSON一樣, BSON結構靈活,組織形式多樣,在提供了強大的數據表達能力的同時,要實現類似數據SQL那樣的方便查詢卻變成了一件非常不容易的事。

????????針對這個問題,集算器SPL語言內置了豐富的接口,能夠極大地方便用戶使用Mongodb。 下面就用合并內嵌子文檔結構的例子來舉例說明。

Collection C1的部分數據如下:

{
?????? "_id" : ? ObjectId("55014006e4b0333c9531043e"),,
?????? "acls" : {
????????????? "append" : {
???????????????????? "users" : ? [ObjectId("54f5bfb0336a15084785c393") ],
???????????????????? "groups" : [ ]
????????????? },
????????????? "edit" : {
???????????????????? "groups" : [ ],
???????????????????? "users" : [
??????????????????????????? ObjectId("54f5bfb0336a15084785c392")
???????????????????? ]
????????????? },
????????????? "fullControl" : {
???????????????????? "users" : [ ],
???????????????????? "groups" : [ ]
????????????? },
????????????? "read" : {
???????????????????? "users" : [? ObjectId("54f5bfb0336a15084785c392"),
???????????????????? ObjectId("54f5bfb0336a15084785c398")],
???????????????????? "groups" : [ ]
????????????? }
?????? },
???? name: "ABC"
}
?
{
?????? "_id" : ? ObjectId("55014006e4b0333c9531043f"),
?????? "acls" : {
????????????? "append" : {
???????????????????? "users" : [ObjectId("54f5bfb0336a15084785c365") ? ],
???????????????????? "groups" : [ ]
????????????? },
????????????? "edit" : {
???????????????????? "groups" : [ ],
???????????????????? "users" : [
??????????????????????????? ObjectId("54f5bfb0336a15084785c392")
???????????????????? ]
????????????? },
????????????? "fullControl" : {
???????????????????? "users" : [ ],
???????????????????? "groups" : [ ]
????????????? },
????????????? "read" : {
???????????????????? "users" : [ObjectId("54f5bfb0336a15084785c392"), ?
???????????????????? ObjectId("54f5bfb0336a15084785c370")],
???????????????????? "groups" : [ ]
????????????? }
?????? },
?????? name: "ABC"
}
?

??????要求按name分組,每組數據是相同的name對應的子文檔中的users字段,且數據不能重復。最后的計算結果類似下面這樣:

{
result : [
?????? {
????????????? ?_id: "ABC",
????????????? ?readUsers : [
???????????????????? ?ObjectId("54f5bfb0336a15084785c393"),
???????????????????? ?ObjectId("54f5bfb0336a15084785c392"),
???????????????????? ObjectId("54f5bfb0336a15084785c398"),
???????????????????? ?ObjectId("54f5bfb0336a15084785c365"),
???????????????????? ObjectId("54f5bfb0336a15084785c370")
????????????? ]
????????????? ?}
]
}

??????使用集算器SPL的代碼如下:


AB
1=mongo_open("mongodb://localhost:27017/local?user=test&password=test")
2=mongo_shell(A1,"c1.find(,{_id:0};{name:1})")
3for A2;name=A3.(acls.read.users|acls.append.users|acls.edit.users|acls.fullControl.users)
4
=B3.new(A3.name:_id,B3.union().id():readUsers)
5
=@|B4.group@1(~._id,~.readUsers)
6=mongo_close(A1)

??????A1:連接MongoDB,連接字格式為mongo://ip:port/db?arg=value&…

??????A2: 使用find函數從MongoDB中取數并排序,形成游標:collectoin是c1,過濾條件是空,取出_id之外的所有字段,并按name排序。

??????A3: 循環從游標讀數,每次取name字段相同的一組文檔。A3循環的作用范圍是縮進的B3到B5,在這個作用范圍內可以用A3來引用循環變量。

??????B3:取出本組文檔的所有users字段,如下:

??????合并 mongodb 子文檔

??????B4:合并本組各文檔的users。

??????B5:將B4去除重復記錄后不斷地追加到B5中,其中group@1實現去重處理。B5如下:

??????合并 mongodb 子文檔

??????B5就是本案例的計算目標。如果計算結果太多導致內存放不下,可以在B5中用函數export@j將B4轉為json串,不斷地追加到文本文件中。

??????A6:關閉mongodb。

??????MongoDB豐富靈活的存儲結構輕量化、高效性,讓人印象深刻,而集算器能與它天然融合,提高使用效率,擴展了應用空間。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

安新县| 疏勒县| 奎屯市| 响水县| 凤山市| 陵川县| 灵台县| 东乌| 浏阳市| 依安县| 镇雄县| 浦北县| 磐石市| 济阳县| 鹤庆县| 怀安县| 肇州县| 桓仁| 休宁县| 望江县| 肥东县| 临高县| 无锡市| 平原县| 建阳市| 石楼县| 宁晋县| 和田市| 黄陵县| 安塞县| 封丘县| 阳城县| 温宿县| 高台县| 宜黄县| 曲沃县| 延边| 南雄市| 竹山县| 梁山县| 福安市|