Mongodb 基础 查询表达式
數(shù)據(jù)庫操作
查看:show dbs;
創(chuàng)建:use dbname; //?db.createCollection('collection_name');? ? 隱式創(chuàng)建,需要創(chuàng)建的數(shù)據(jù)庫中有表才表示創(chuàng)建成功
刪除:use dbname;?db.dropDatabase();? ?//?選擇好對應的數(shù)據(jù)庫,然后刪除
如下實例:
查看數(shù)據(jù)庫:
> show dbs; admin 0.000GB local 0.000GB test_1 0.000GB >
?創(chuàng)建數(shù)據(jù)庫:隱式創(chuàng)建,直接use不存在的數(shù)據(jù)庫
> use student; switched to db student?查看沒有:因為沒有在這個數(shù)據(jù)庫中創(chuàng)建表,只有創(chuàng)建表后才創(chuàng)建成功
> use student; switched to db student > show dbs; admin 0.000GB local 0.000GB test_1 0.000GB?下面表示創(chuàng)建成功:
> use student; switched to db student > show dbs; admin 0.000GB local 0.000GB test_1 0.000GB > > show collections; > > show tables; > db.createCollection('minstudent'); { "ok" : 1 } > show tables; minstudent > show dbs; admin 0.000GB local 0.000GB student 0.000GB test_1 0.000GB?刪除數(shù)據(jù)庫:
> db.dropDatabase(); { "dropped" : "student", "ok" : 1 } >數(shù)據(jù)文檔操作
這里的文檔類似與MySQL中的表,因為Mongodb是文檔數(shù)據(jù)庫,所以可以說是對文檔的操作;
創(chuàng)建:db.createCollection('collection_name');
刪除:db.collection_name.drop();
查看:show collections;
如下實例:
創(chuàng)建
> use school; switched to db school > > db.createCollection('student'); { "ok" : 1 }?刪除
> db.student.drop(); true?查看
> db.teacher.insert({'name':'teacher1'}); WriteResult({ "nInserted" : 1 }) > show collections; teacher文檔內(nèi)容操作
插入數(shù)據(jù):db.collection_name.insert({key:value})? 單個插入
? ? ? ? ? ? ? ? ? db.collection_name.insert({_id:value, key:value})?有_id的插入
? ? ? ? ? ? ? ? ? db.collection_name.insert([{key:value},{key:value}])? ?多個插入
查看:db.collection_name.find();? ? //?這里只例舉簡單的查詢方法,會單獨寫一篇文檔詳細說明查詢的方法
刪除:db.collection_name.remove(查詢表達式,選項)
修改:db.collection_name.update(查詢表達式,新值,選項)
如下實例:
插入
> db.student.insert({'name': 'wallace'}); WriteResult({ "nInserted" : 1 }) > db.student.find(); { "_id" : ObjectId("5c810428cdad789abb91899a"), "name" : "wallace" }?修改_id
> db.student.insert({'name': 'bbbb', '_id':111}); WriteResult({ "nInserted" : 1 }) > db.student.find(); { "_id" : ObjectId("5c810428cdad789abb91899a"), "name" : "wallace" } { "_id" : ObjectId("5c810441cdad789abb91899b"), "name" : "bbbb" } { "_id" : 111, "name" : "bbbb" }?插入多條
> db.student.insert([{'age': 'bbbb', 'age':111, 'home': 'beijin'},{'age':'laowang', 'age': 1, 'home':'江西'}]); BulkWriteResult({"writeErrors" : [ ],"writeConcernErrors" : [ ],"nInserted" : 2,"nUpserted" : 0,"nMatched" : 0,"nModified" : 0,"nRemoved" : 0,"upserted" : [ ] }) > db.student.find(); { "_id" : ObjectId("5c810428cdad789abb91899a"), "name" : "wallace" } { "_id" : ObjectId("5c810441cdad789abb91899b"), "name" : "bbbb" } { "_id" : 111, "name" : "bbbb" } { "_id" : ObjectId("5c810567cdad789abb91899c"), "age" : 111, "home" : "beijin" } { "_id" : ObjectId("5c810567cdad789abb91899d"), "age" : 1, "home" : "江西"}刪除數(shù)據(jù)
> db.student.find(); { "_id" : ObjectId("5c810428cdad789abb91899a"), "name" : "wallace" } { "_id" : ObjectId("5c810441cdad789abb91899b"), "name" : "bbbb" } { "_id" : 111, "name" : "bbbb" } { "_id" : ObjectId("5c810567cdad789abb91899c"), "age" : 111, "home" : "beijin" } { "_id" : ObjectId("5c810567cdad789abb91899d"), "age" : 1, "home" : "江西" } { "_id" : ObjectId("5c810575cdad789abb91899e"), "age" : 111, "home" : "beijin" } { "_id" : ObjectId("5c810575cdad789abb91899f"), "age" : 1, "home" : "江西" } > db.student.remove({home:'beijin'}); WriteResult({ "nRemoved" : 2 }) > db.student.find(); { "_id" : ObjectId("5c810428cdad789abb91899a"), "name" : "wallace" } { "_id" : ObjectId("5c810441cdad789abb91899b"), "name" : "bbbb" } { "_id" : 111, "name" : "bbbb" } { "_id" : ObjectId("5c810567cdad789abb91899d"), "age" : 1, "home" : "江西" } { "_id" : ObjectId("5c810575cdad789abb91899f"), "age" : 1, "home" : "江西" } > db.student.remove({home:'江西'}, true); WriteResult({ "nRemoved" : 1 }) > db.student.find(); { "_id" : ObjectId("5c810428cdad789abb91899a"), "name" : "wallace" } { "_id" : ObjectId("5c810441cdad789abb91899b"), "name" : "bbbb" } { "_id" : 111, "name" : "bbbb" } { "_id" : ObjectId("5c810575cdad789abb91899f"), "age" : 1, "home" : "江西" } >修改
> db.student.find(); { "_id" : ObjectId("5c810428cdad789abb91899a"), "name" : "wallace" } { "_id" : ObjectId("5c810441cdad789abb91899b"), "name" : "bbbb" } { "_id" : 111, "name" : "bbbb" } { "_id" : ObjectId("5c810575cdad789abb91899f"), "age" : 1, "home" : "江西" } > db.student.update({home:'江西'},{home:北京}); 2019-03-08T09:00:31.981-0500 E QUERY [thread1] ReferenceError: \u5317\u4EAC is not defined : @(shell):1:32 > db.student.update({home:'江西'},{home:'北京'}); WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.student.find(); { "_id" : ObjectId("5c810428cdad789abb91899a"), "name" : "wallace" } { "_id" : ObjectId("5c810441cdad789abb91899b"), "name" : "bbbb" } { "_id" : 111, "name" : "bbbb" } { "_id" : ObjectId("5c810575cdad789abb91899f"), "home" : "北京" }修改二:$set?具體到某一個鍵值對的值
> db.student.insert({'name':'bbb',age:18, classmate:4}); WriteResult({ "nInserted" : 1 }) > db.student.update({name:'bbb'}, {$set:{'age':19}}); WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.student.find(); { "_id" : ObjectId("5c810428cdad789abb91899a"), "name" : "wallace" } { "_id" : ObjectId("5c810441cdad789abb91899b"), "name" : "1111" } { "_id" : 111, "name" : "bbbb" } { "_id" : ObjectId("5c810575cdad789abb91899f"), "home" : "北京" } { "_id" : ObjectId("5c835969043334857a7dbe85"), "name" : "aaa", "age" : 18, "classmate" : 3 } { "_id" : ObjectId("5c835973043334857a7dbe86"), "name" : "bbb", "age" : 19, "classmate" : 4 }修改三:$unset?刪除某一對象的鍵值對
> db.student.update({name:'bbb'}, {$unset:{'age':19}}); WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.student.find(); { "_id" : ObjectId("5c810428cdad789abb91899a"), "name" : "wallace" } { "_id" : ObjectId("5c810441cdad789abb91899b"), "name" : "1111" } { "_id" : 111, "name" : "bbbb" } { "_id" : ObjectId("5c810575cdad789abb91899f"), "home" : "北京" } { "_id" : ObjectId("5c835969043334857a7dbe85"), "name" : "aaa", "age" : 18, "classmate" : 3 } { "_id" : ObjectId("5c835973043334857a7dbe86"), "name" : "bbb", "classmate" : 4 } >修改列名
> db.student.update({name:'bbb'}, {$rename:{'name':'sc'}}); WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.student.find(); { "_id" : ObjectId("5c810428cdad789abb91899a"), "name" : "wallace" } { "_id" : ObjectId("5c810441cdad789abb91899b"), "name" : "1111" } { "_id" : 111, "name" : "bbbb" } { "_id" : ObjectId("5c810575cdad789abb91899f"), "home" : "北京" } { "_id" : ObjectId("5c835969043334857a7dbe85"), "name" : "aaa", "age" : 18, "classmate" : 3 } { "_id" : ObjectId("5c835973043334857a7dbe86"), "classmate" : 4, "sc" : "bbb" } >增加值
> db.student.find(); { "_id" : ObjectId("5c810428cdad789abb91899a"), "name" : "wallace" } { "_id" : ObjectId("5c810441cdad789abb91899b"), "name" : "1111" } { "_id" : 111, "name" : "bbbb" } { "_id" : ObjectId("5c810575cdad789abb91899f"), "home" : "北京" } { "_id" : ObjectId("5c835969043334857a7dbe85"), "name" : "aaa", "age" : 37, "classmate" : 3 } { "_id" : ObjectId("5c835973043334857a7dbe86"), "classmate" : 4, "sc" : "bbb" } > db.student.update({name:'aaa'},{$inc:{age:10}}); WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.student.find(); { "_id" : ObjectId("5c810428cdad789abb91899a"), "name" : "wallace" } { "_id" : ObjectId("5c810441cdad789abb91899b"), "name" : "1111" } { "_id" : 111, "name" : "bbbb" } { "_id" : ObjectId("5c810575cdad789abb91899f"), "home" : "北京" } { "_id" : ObjectId("5c835969043334857a7dbe85"), "name" : "aaa", "age" : 47, "classmate" : 3 } { "_id" : ObjectId("5c835973043334857a7dbe86"), "classmate" : 4, "sc" : "bbb" } >條件關鍵字
mongodb的條件查詢與普通的SQL查詢不一樣,使用特定的符號來代替,下面表格的常用的的條件代替。
| 等于 | {<key>:<value>} | db.col.find({"by":"aaa"}).pretty() | where by = 'aaa' |
| 小于 | {<key>:{$lt:<value>}} | db.col.find({"likes":{$lt:50}}).pretty() | where likes < 50 |
| 小于或等于 | {<key>:{$lte:<value>}} | db.col.find({"likes":{$lte:50}}).pretty() | where likes <= 50 |
| 大于 | {<key>:{$gt:<value>}} | db.col.find({"likes":{$gt:50}}).pretty() | where likes > 50 |
| 大于或等于 | {<key>:{$gte:<value>}} | db.col.find({"likes":{$gte:50}}).pretty() | where likes >= 50 |
| 不等于 | {<key>:{$ne:<value>}} | db.col.find({"likes":{$ne:50}}).pretty() | where likes != 50 |
?
條件查詢實例
1: 基礎查詢 where的練習:查出滿足以下條件的商品 1.1:主鍵為32的商品db.goods.find({goods_id:32});1.2:不屬第3欄目的所有商品($ne)db.goods.find({cat_id:{$ne:3}},{goods_id:1,cat_id:1,goods_name:1});1.3:本店價格高于3000元的商品{$gt} db.goods.find({shop_price:{$gt:3000}},{goods_name:1,shop_price:1}); 1.4:本店價格低于或等于100元的商品($lte) db.goods.find({shop_price:{$lte:100}},{goods_name:1,shop_price:1}); 1.5:取出第4欄目或第11欄目的商品($in) db.goods.find({cat_id:{$in:[4,11]}},{goods_name:1,shop_price:1}); 1.6:取出100<=價格<=500的商品($and) db.goods.find({$and:[{price:{$gt:100},{$price:{$lt:500}}}]);和下面方式結果一樣:
db.goods.find({shop_price:{$gt:100}, shop_price:{$lt:5000}}, {goods_name:1, _id:0, goods_number:1, shop_price:1}) 1.7:取出不屬于第3欄目且不屬于第11欄目的商品($and $nin和$nor分別實現(xiàn)) db.goods.find({$and:[{cat_id:{$ne:3}},{cat_id:{$ne:11}}]},{goods_name:1,cat_id:1}) db.goods.find({cat_id:{$nin:[3,11]}},{goods_name:1,cat_id:1}); db.goods.find({$nor:[{cat_id:3},{cat_id:11}]},{goods_name:1,cat_id:1}); 1.8:取出價格大于100且小于300,或者大于4000且小于5000的商品() db.goods.find({$or:[{$and:[{shop_price:{$gt:100}},{shop_price:{$lt:300}}]},{$and:[{shop_price:{$gt:4000}},{shop_price:{$lt:5000}}]}]},{goods_name:1,shop_price:1}); 1.9:取出goods_id%5 == 1, 即,1,6,11,..這樣的商品 db.goods.find({goods_id:{$mod:[5,1]}}); 1.10:取出有age屬性的文檔 db.stu.find({age:{$exists:1}}); 含有age屬性的文檔將會被查出
1.11:使用where進行查詢:
db.stu.find({$where:'this.goods_id>=3'}); // value直接接過濾條件
游標?cursor
游標不是查詢結果,而是查詢的返回資源,或者接口。類似與python中的生成器
通過調用可以逐條讀取。直接將查詢結果賦值給一個變量就是游標
var cursor = db.colllections_name.find(query, projection) cursor.hasNext() //判斷是否已經(jīng)取完 cursor.Next() // 取出下一個元素通常情況下我們用循環(huán)來獲取游標中的值:
while循環(huán)
> var cursor=db.goods.find(); > while(cursor.hasNext()){ ... printjson(cursor.next());} {for循環(huán)
> var cursor=db.goods.find(); > for(var doc=true;cursor.hasNext();){printjson(cursor.next())}? > for(var cursor=db.goods.find(); doc=true;cursor.hasNext()){printjson(cursor.next())}
forEach循環(huán):可以自己添加回調函數(shù)
> var fun = function(obj){print(obj.goods_name)}; // 定義函數(shù) > var cursor = db.goods.find(); // 創(chuàng)建游標 > cursor.forEach(fun); // 調用函數(shù)游標分頁:這個默認形式,也可以使用游標的形式
db.collection_name.find().skip(10); //表示跳過10開始取db.collection_name.find().limit(10); //表示取10個
?索引
? ? 索引提高查詢速度,但會降低寫入速度,所以再使用的時候需要權衡查詢字段,不必在太多列上創(chuàng)建索引。在Mongodb中,索引可以按字段升序/降序來創(chuàng)建索引,便于排序。默認情況下mongodb是用btree來組織索引文件,2.4后也有通過hash來創(chuàng)建索引。
查看當前文檔有那些索引
>db.collection_name.getIndexes()創(chuàng)建普通索引(1表示升序,-1表示降序)
> db.collection_name.ensureIndex({field:1})創(chuàng)建多列索引
> db.collection_name.ensureIndex({field1:1, field2:1});創(chuàng)建唯一索引
> db.collection_name.ensureIndex({field:1},{unique:true});創(chuàng)建hash索引
> db.collection_name.ensureIndex({field:'hashed'});創(chuàng)建稀疏索引:如果針對field做索引,針對不含field列的文檔將不做索引。而普通索引是會把該列作為null表示,并建立索引。
> db.collection_name.ensureIndex({name:1}, {sparse:true});重建索引
一個表經(jīng)過很多次修改后,導致表的文件產(chǎn)生空洞,索引文件也是如此,可以通過索引重建,減少索引文件碎片,并提高索引的效率。類似mysql中的?optimize table
> db.collection_name.reIndex();?
轉載于:https://www.cnblogs.com/tashanzhishi/p/10491890.html
總結
以上是生活随笔為你收集整理的Mongodb 基础 查询表达式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java的this关键字理解
- 下一篇: [BZOJ4259]残缺的字符串