標籤:style blog http color io os ar 使用 for
windows下mongodb基礎玩法系列
- windows下mongodb基礎玩法系列一介紹與安裝
- windows下mongodb基礎玩法系列二CURD操作(建立、更新、讀取和刪除)
- windows下mongodb基礎玩法系列二CURD附加一
說在前面的話在系列二中CURD只是簡單的走了一下代碼操作的流程,其中全是簡單基礎操作的內容, 在我仔細看完接下來的內容後決定再豐富一下前面的操作,並實戰一個簡單的demo出來,demo具體搭配語言暫時決定在PHP與nodejs之間。增加內容至文檔沒說完的那些事兒目錄
集合的建立與傳回值 ①在插入文檔到集合的時候,如果集合不存在,增加內容到文檔的這個操作就自動建立集合。這一點和mysql有些不一樣,mysql必須先建立庫、表,再增加內容到表中。
②這一次就不實際操作了,按照之前的操作我又走看一遍,這一次留意了一個小的細節。增加內容成功後會返回一個WriteResult({"nInserted":1}),這個對象表示了插入的條數。
增加多個文檔的方法①建立一個數組文檔,在增加數組文檔即可。
//用數組存放多個文檔var users = [{ "name":"A", "age":32},{ "name":"B", "age":33},{ "name":"C", "age":34}];//添加數組操作db.testData.insert(users);
View Code②在2.6版本之後提供了一個可以用來增加多個文檔的API,具體操作流程展開代碼。
//初始化bulk()var bulk = db.testData.initializeUnorderedBulkOp();//無序列表操作//var bulk = db.collection.initializeOrderedBulkOp();//有序列表操作//insert至bulk對象bulk.insert({ "name":"A", "age":20});bulk.insert({ "name":"B", "age":21});//調用bulk對象的execute()方法添加文檔至集合bulk.execute();
View Code這裡只是描述一下有這兩個方法,暫時不做深入學習,感覺挺需要深入學習的一點,後續跟蹤一下。尋找內容沒說完的那些事兒目錄
- 指定查詢與條件查詢使用
- 嵌入式(Embedded)文檔查詢的方法
- 限制查詢
- 反覆的切換游標讀取
- 查詢的效能問題
指定查詢與條件查詢使用前面的學習中已經學會了簡單的指定查詢與條件查詢,綜合運用就是,例,我們要找出姓名是A,或者年齡是33/34的所有人(隨意營造的條件)。此時我把之前隨意添加的資料再添加了兩次用於這次測試。
db.testData.find({$or:[{"name":"A"},{"age":{$in:[33,34]}}]});
View Code嵌入式(Embedded)文檔查詢的方法
//插入類比資料db.testData.insert([{ "name":"unofficial", "age":18, "other":{ "hobby":["eat","drink","play","happy"], "speciality":["hands","legs"] }, "score":[58,59,60]},{ "name":"pushself", "age":100, "other":{ "hobby":["play"], "speciality":["legs"] }, "score":[60,70,80]}]);//成績分別對應語數外,找到語文成績小於60的同學的姓名db.testData.find({"score.0":{$lt:60}},{"_id":0, "name":1});//把好吃的傢伙的名字查出來db.testData.find({"other.hobby":"eat"},{"_id":0, "name":1});
View Code限制查詢在find()時,在第二個參數中控制對應需要的索引值對,例如我不需要_id,只是需要顯示姓名,我就可以把第二個參數設定為{"_id":0,"name":1}。反覆的切換游標讀取
//執行尋找操作var rs = db.testData.find({});//遍曆while(rs.hasNext()) { print(tojson(rs.next()));//也可以使用printjson(rs.next());}
View Code其中的while也可以使用myCursor.forEach(printjson);代替操作查詢的效能問題取決於索引的建立,引入一個explain()方法反應查詢效能的資料。
//插入一組測試資料db.testData.insert([ { "_id" : 1, "item" : "f1", type: "food", quantity: 500 }, { "_id" : 2, "item" : "f2", type: "food", quantity: 100 }, { "_id" : 3, "item" : "p1", type: "paper", quantity: 200 }, { "_id" : 4, "item" : "p2", type: "paper", quantity: 150 }, { "_id" : 5, "item" : "f3", type: "food", quantity: 300 }, { "_id" : 6, "item" : "t1", type: "toys", quantity: 500 }, { "_id" : 7, "item" : "a1", type: "apparel", quantity: 250 }, { "_id" : 8, "item" : "a2", type: "apparel", quantity: 400 }, { "_id" : 9, "item" : "t2", type: "toys", quantity: 50 }, { "_id" : 10, "item" : "f4", type: "food", quantity: 75 }]);//執行尋找操作db.testData.find({"type":"food"});//nscanned 和 nscannedObjects 顯示 10 表明MongoDB不得不掃描十文檔 (即集合中的所有文檔)找到這四個匹配文檔。//如果給type添加一個索引db.testData.ensureIndex({"type":1})//再執行查詢操作的時候就查詢四個索引文檔,並返回了四個文檔內容//複合索引的效能db.testData.ensureIndex( { quantity: 1, type: 1 } );db.testData.ensureIndex( { type: 1, quantity: 1 } );//明顯通過資料可以看出效能的差異,更多的後面的學習文章爭取分析一下查詢最佳化
View Code刪除操作針對前面的內容,這裡暫時只是補充一點內容就是通過條件匹配到的內容,只是刪除一條內容的時候,第二個參數設定為1即可。 db.testData.remove({"type":"food"}, 1);
windows下mongodb基礎玩法系列二CURD附加一