日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MongoDB应用篇(转)

發布時間:2025/6/17 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MongoDB应用篇(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、高級查詢

1. 查詢操作符

1.1 比較操作符$gt,$lt,$gte,$lte

實例: select * from things where field<value -- 等價于db.things.find({"field":{$lt:value}})
select * from things where field<value2 and field>value1 -- 等價于db.things.find({"field":{$lt:value2,$gt:value1}})

1.2 $all匹配所有

這個操作符跟SQL 語法的in 類似,但不同的是, in 只需滿足( )內的某一個值即可, 而$all 必須滿足[ ]內的所有值,

例如:db.users.find({age:{$all:[6,8]}});可以查詢出{name:'David',age:26,age:[6,8,9]}但查詢不出{name:'David',age:26,age:[6,7,9]}

1.3 $exists判斷字段是否存在

查詢所有存在age 字段的記錄:

db.users.find({age: {$exists: true}});

查詢所有不存在name 字段的記錄:

db.users.find({name: {$exists: false}});

1.4 $mod取模運算符

查詢age 取模10 等于1 的數據:

db.student.find({age:{$mod:[10, 1]}})

1.5 $ne不等于

查詢x 的值不等于3 的數據:

db.things.find( { x : { $ne : 3 } } );

1.6 $in/$nin包含/不包含

與sql 標準語法的用途是一樣的,即要查詢的是一系列枚舉值的范圍內查詢x 的值在2,4,6 范圍內的數據:

db.things.find({x:{$in: [2,4,6]}});

1.7 $size數據元素個數

對于{name: 'David', age: 26, favorite_number: [ 6, 7, 9 ] }記錄匹配db.users.find({favorite_number: {$size: 3}});不匹配db.users.find({favorite_number: {$size: 2}});

1.8 正則表達式$not:/ * /

查詢不匹配name=B*帶頭的記錄:

select * from users where name not like 'B%'等價于db.users.find({name:{$not:/^B.*/}});

1.9 null值處理

db.users.find({age:null})這種查詢會查出age為null的和沒有age字段的json對象。可采用下面方法達到查詢目的:

db.users.find({age:{"$in":[null], "$exists":true}})

1.10 Javascript查詢和$where查詢

查詢a 大于3 的數據,下面的查詢方法殊途同歸:

db.c1.find( { a : { $gt: 3 } } );
db.c1.find( { $where: "this.a > 3" } );
db.c1.find("this.a > 3");
f = function() { return this.a > 3; } db.c1.find(f);

1.11 count查詢記錄條數,limit限制返回記錄數

count 查詢記錄條數:

db.users.find().count(); //全collection查詢

注意:以下返回的是user 表中所有的記錄數量:

db.users.find().skip(10).limit(5).count();

如果要返回限制之后的記錄數量,要使用count(true)或者count(非0)

1.12 skip限制返回記錄的起點

從第3 條記錄開始,返回5 條記錄:(limit 3, 5)等價于:

db.users.find().skip(3).limit(5);

1.13 sort 排序

以年齡升序ascdb.users.find().sort({age: 1});
以年齡降序descdb.users.find().sort({age: -1});

2 游標

MongoDB 也是用游標來循環處理每一條結果數據,典型用法如下:

for(var cursor=db.users.find();cursor.hasNext()){printjson(cursor.next())};
db.users.find().forEach( function(u) { printjson(u); } );
db.users.find().forEach(printjson);

1.3 存儲過程

MongoDB 同樣支持存儲過程。關于存儲過程你需要知道的第一件事就是它是用javascript 來寫的。MongoDB 存儲過程是存儲在db.system.js 表中的。

  • 第一步是定義函數:function addNumbers(x, y){return x+y;}
  • 第二步是放入js表中:db.system.js.save({_id:"addNumbers",value:addNumbers})或db.system.js.save({_id:"addNumbers",value:function(x,y){return x+y;}})
  • 第三步執行存儲過程:db.eval('addNumbers(3,4)');
  • ?

    二、Capped Collection

    1.簡介

    capped collections 是性能出色的有著固定大小的集合,以LRU(Least Recently Used 最近最少使用)規則和插入順序進行age-out(老化移出)處理,自動維護集合中對象的插入順序,在創建時要預先指定大小。如果空間用完,新添加的對象將會取代集合中最舊的對象。

    2.功能特別

    可以插入及更新,但更新不能超出collection 的大小,否則更新失敗。不允許刪除,但是可以調用drop() 刪除集合中的所有行,但是drop 后需要顯式地重建集合。在32 位機上,一個capped collection 的最大值約為482.5M,64 位上只受系統文件大小的限制。

    3. 常見用處

  • loggingMongoDB 中日志機制的首選,MongoDB 沒有使用日志文件,而是把日志事件存儲在數據庫中。在一個沒有索引的capped collection 中插入對象的速度與在文件系統中記錄日志的速度相當。
  • cache緩存一些對象在數據庫中,比如計算出來的統計信息。這樣的需要在collection 上建立一個索引,因為使用緩存往往是讀比寫多。
  • auto archiving可以利用capped collection 的age-out 特性,省去了寫cron 腳本進行人工歸檔的工作。
  • 4.?推薦用法

  • 為了發揮capped collection 的最大性能,如果寫比讀多,最好不要在上面建索引,否則插入速度從"log speed"降為"database speed"。
  • 使用"nature ordering"可以有效地檢索最近插入的元素,因為capped collection 能夠保證自然排序就是插入時的順序,類似于log 文件上的tail 操作。
  • 5. 注意事項

  • 可以在創建capped collection 時指定collection 中能夠存放的最大文檔數。但這時也要指定size,因為總是先檢查size 后檢查maxRowNumber。可以使用validate()查看一個collection已經使用了多少空間,從而決定size 設為多大。如:db.createCollection("mycoll", {capped:true, size:100000, max:100});db.mycoll.validate();max=1 時會往collection 中存放盡量多的documents。
  • 上述的createCollection 函數也可以用來創建一般的collection , 還有一個參數"autoIndexID",值可以為"true"和"false"來決定是否需要在"_id"字段上自動創建索引,如:db.createCollection("mycoll", {size:10000000, autoIndexId:false})。默認情況下對一般的collection 是創建索引的,但不會對capped collection 創建。
  • ?

    三、GridFS

    GridFS 是一種將大型文件存儲在MongoDB 數據庫中的文件規范。所有官方支持的驅動均實現了GridFS 規范。

    1. 為什么使用GridFS?

    由于MongoDB 中BSON 對象大小是有限制的,所以GridFS 規范提供了一種透明的機制,可以將一個大文件分割成為多個較小的文檔,這樣的機制允許我們有效的保存大文件對象,特別對于那些巨大的文件,比如視頻、高清圖片等。

    2. 如何實現海量存儲?

    為實現這點,該規范指定了一個將文件分塊的標準。每個文件都將在文件集合對象中保存一個元數據對象,一個或多個chunk 塊對象可被組合保存在一個chunk 塊集合中。大多數情況下,你無需了解此規范中細節,而可將注意力放在各個語言版本的驅動中有關GridFS API 的部分或是如何使用mongofiles 工具上。

    3. 簡單介紹

    GridFS 使用兩個表來存儲數據:

    • files 包含元數據對象
    • chunks 包含其他一些相關信息的二進制塊

    為了使多個GridFS 命名為一個單一的數據庫,文件和塊都有一個前綴,默認情況下,前綴是fs,所以任何默認的GridFS 存儲將包括命名空間fs.files 和fs.chunks。各種第三方語言的驅動有權限改變這個前綴。

    4.命令行工具

    mongofiles [-options] [list|search|put|get]

    5. 索引

    db.fs.chunks.ensureIndex({files_id:1, n:1}, {unique: true});

    這樣,一個塊就可以利用它的files_id 和 n 的值進行檢索。注意,GridFS 仍然可以用findOne得到第一個塊,如下:

    ?
    1 db.fs.chunks.findOne({files_id: myFileID, n: 0});

    ?

    四、MapReduce

    MongoDB 的MapReduce 相當于Mysql 中的"group by",所以在MongoDB 上使用 Map/Reduce進行并行"統計"很容易。

    使用MapReduce 要實現兩個函數 Map 函數和Reduce 函數,Map 函數調用emit(key, value),遍歷collection中所有的記錄,將key與value傳遞給Reduce 函數進行處理。Map函數和Reduce函數可以使用JavaScript 來實現,可以通過db.runCommand 或mapReduce 命令來執行一個MapReduce 的操作:

    1 db.runCommand({
    2 mapreduce : ,
    3 map : ,
    4 reduce :
    5 [, query : ]
    6 [, sort : ]
    7 [, limit : ]
    8 [, out : ]
    9 [, keeptemp: ]
    10 [, finalize : ]
    11 [, scope : ]
    12 [, verbose: ]
    13 })


    原文地址:http://www.cnblogs.com/oubo/archive/2012/02/22/2394665.html

    轉載于:https://www.cnblogs.com/zqn518/p/3303856.html

    總結

    以上是生活随笔為你收集整理的MongoDB应用篇(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 在线观看麻豆av | 午夜在线一区二区三区 | 自拍偷拍校园春色 | 欧美综合亚洲图片综合区 | 91激情| 亚洲最大在线视频 | 婷婷色婷婷 | 日韩一区二区三区高清 | 天天澡天天狠天天天做 | 欧美1314| 色噜噜狠狠狠综合曰曰曰 | 日韩av高清 | 亚洲国产欧美日韩 | 亚洲妇女av | av电影在线不卡 | 东方成人av在线 | 免费二区 | 色网站在线免费观看 | 一边摸一边做爽的视频17国产 | 欧美18—19性高清hd4k | 女女h百合无遮羞羞漫画软件 | 最新国产在线视频 | 欧美视频三区 | 精品久久网站 | 成人免费aaa | 先锋资源一区 | 日韩3p | 亚洲欧美综合一区 | 欧美一级一区 | 少妇理论片| 中国女人一级片 | 97人妻精品一区二区三区免 | 激情xxxx | 牛牛av国产一区二区 | 色夜av| 爱的天堂| 齐天大性床战铁扇公主 | av福利在线 | 桃色91 | 亚洲一级av毛片 | 羞羞成人 | 在线视频日本 | 免费污视频在线观看 | 人妻射精一区二区 | 中文字幕在线视频一区二区三区 | 国产欧美一区二区精品忘忧草 | av999| 国产午夜视频 | 成人做爰www看视频软件 | 日本不卡高清视频 | 精品无码久久久久久久 | 国产成人无码精品久久久电影 | 日本一级黄 | 三级视频网站 | 亚洲淫视频 | 日韩av动漫 | 熟女精品一区二区三区 | 人与禽一级全黄 | 日韩黄色精品 | 欧美a天堂 | 日韩毛片| 亚洲综合久久av一区二区三区 | 乱色精品无码一区二区国产盗 | 一卡二卡在线 | 精品无码久久久久久国产 | 国产不卡在线视频 | 99精品视频一区二区三区 | 亚洲天天干 | 色臀| free性中国hd国语露脸 | www.99re. | 久久久久综合网 | 91gao| 国产精品一区二区无码免费看片 | 成人动态视频 | 国产又色又爽又黄的 | 黄金网站在线观看 | 欧美日韩一本 | 国产精品九九 | 一级片在线免费 | 亚洲二区一区 | yw视频在线观看 | 色婷婷精品国产一区二区三区 | 久久精精品久久久久噜噜 | 亚洲成av人影院 | av免费的 | 久久国产精品首页 | 黄色福利社 | 丁香花电影免费播放在线观看 | 在线看一区二区 | 亚洲一区二区国产精品 | 韩国三级hd两男一女 | 国产精自产拍久久久久久蜜 | 国产一级大片在线观看 | 成人性生交大片免费看 | 在线成人小视频 | 一级肉体全黄裸片 | 国产一区二 | 无码无套少妇毛多18pxxxx |