mongodb不等于某个值_MongoDB的安装以及基本增删改查命令
MongoDB 介紹
mongodb 和大多數NoSQL 數據庫(redis,memcached 等)一樣,都是以 kv數據庫(key/value) 存儲數據
不同的是mongodb 文檔數據庫,存儲的是文檔(Bson->json的二進制化).
特點:內部執行引擎為JS解釋器, 把文檔存儲成bson結構,在查詢時,轉換為JS對象,并可以通過熟悉的js語法來操作.
mongo和傳統型數據庫相比,最大的不同:傳統型數據庫: 結構化數據, 定好了表結構后,每一行的內容,必是符合表結構的,就是說--列的個數,類型都一樣.mongo文檔型數據庫: 表下的每篇文檔,都可以有自己獨特的結構(json對象都可以有自己獨特的屬性和值)
問題: 如果有電影, 影評, 影評的回復, 回復的打分在傳統型數據庫中, 至少要4張表, 關聯度非常復雜.在文檔數據庫中,通過1篇文檔,即可完成. 體現出文檔型數據庫的反范式化
{fiim: ’天龍八部’comment: [{content: ’王家衛的電影風格’,reply: [‘支持’, ’好’]}]}mongodb的安裝
1: 下載mongodb www.mongodb.org 下載最新的stable版
2: 解壓文件
3: 不用編譯,本身就是編譯后的二進制可執行文件
4: 啟動mongod服務
./bin/mongod --dbpath /path/to/database --logpath /path/to/log --fork --port 27017
參數解釋:
--dbpath 數據存儲目錄
--logpath 日志存儲目錄
--port 運行端口(默認27017)
--fork 后臺進程運行
5: mongodb非常的占磁盤空間, 剛啟動后要占3-4G左右,
如果你用虛擬機練習,可能空間不夠,導致無法啟動.
可以用 --smallfiles 選項來啟動,
將會占用較小空間 400M左右.
mongo入門命令
1.1: show dbs 查看當前的數據庫
1.2 use databaseName 選庫
1.2 show tables/collections 查看當前庫下的collection
1.3 如何創建庫?
Mongodb的庫是隱式創建,你可以use 一個不存在的庫
然后在該庫下創建collection,即可創建庫
1.4 db.createCollection(‘collectionName’) 創建collection
1.5 collection允許隱式創建 Db.collectionName.insert(document);
1.6 db.collectionName.drop() ,刪除collection
1.7 db.dropDatabase(); 刪除database
基本操作增刪改查
增: insert
介紹: mongodb存儲的是文檔,. 文檔是json格式的對象.
語法: db.collectionName.isnert(document);
1: 增加單篇文檔
Db.collectionName.insert({title:’nice day’});2: 增加單個文檔,并指定_id
Db.collectionName.insert({_id:8,age:78,name:’lisi’});增加多個文檔db.collectionName.insert([{time:'friday',study:'mongodb'},{_id:9,gender:'male',name:'QQ'}])刪:remove
語法: db.collection.remove(查詢表達式, 選項);
選項是指 {justOne:true/false},是否只刪一行, 默認為false
注意
1: 查詢表達式依然是個json對象
2: 查詢表達式匹配的行,將被刪掉
3: 如果不寫查詢表達式,collections中的所有文檔將被刪掉.
例1:
db.stu.remove({sn:’001’});刪除stu表中 sn屬性值為’001’的文檔例2:
db.stu.remove({gender:’m’,true});刪除stu表中gender屬性為m的文檔,只刪除1行改 update操作
改誰? --- 查詢表達式改成什么樣?
-- 新值 或 賦值表達式操作選項 ----- 可選參數語法:
db.collection.update(查詢表達式,新值,選項);
例:
db.news.update({name:'QQ'},{name:'MSN'});是指選中news表中,name值為QQ的文檔,并把其文檔值改為{name:’MSN’},
結果: 文檔中的其他列也不見了,改后只有_id和name列了.即--新文檔直接替換了舊文檔,而不是修改
如果是想修改文檔的某列,可以用$set關鍵字
db.collectionName.update(query,{$set:{name:’QQ’}})修改時的賦值表達式$set 修改某列的值$unset 刪除某個列$rename 重命名某個列$inc 增長某個列$setOnInsert 當upsert為true時,并且發生了insert操作時,可以補充的字段.
Option的作用:
{upsert:true/false,multi:true/false}Upsert---是指沒有匹配的行,則直接插入該行.(和mysql中的replace一樣)
例:
db.stu.update({name:'wuyong'},{$set:{name:'junshiwuyong'}},{upsert:true});如果有name=’wuyong’的文檔,將被修改如果沒有,將添加此新文檔
例:
db.news.update({_id:99},{x:123,y:234},{upsert:true});沒有_id=99的文檔被修改,因此直接插入該文檔
multi: 是指修改多行(即使查詢表達式命中多行,默認也只改1行,如果想改多行,可以用此選項)例:
db.news.update({age:21},{$set:{age:22}},{multi:true});則把news中所有age=21的文檔,都修改
查: find, findOne
語法: db.collection.find(查詢表達式,查詢的列);Db.collections.find(表達式,{列1:1,列2:1});
例1:db.stu.find()查詢所有文檔 所有內容
例2: db.stu.find({},{gendre:1})查詢所有文檔,的gender屬性 (_id屬性默認總是查出來)
例3: db.stu.find({},{gender:1, _id:0})查詢所有文檔的gender屬性,且不查詢_id屬性
例3: db.stu.find({gender:’male’},{name:1,_id:0});查詢所有gender屬性值為male的文檔中的name屬性
查詢表達式:
1: 最簡單的查詢表達式{filed:value} ,是指查詢field列的值為value的文檔
2: $ne --- != 查詢表達式{field:{$nq:value}}作用--查filed列的值 不等于 value 的文檔
3: $nin --> not in
4: $all語法: {field:{$all:[v1,v2..]}}是指取出 field列是一個數組,且至少包含 v1,v2值
5: $exists語法: {field:{$exists:1}}作用: 查詢出含有field字段的文檔
6: $nor,{$nor,[條件1,條件2]}是指 所有條件都不滿足的文檔為真返回
7:用正則表達式查詢 以”諾基亞”開頭的商品例:db.goods.find({goodsname:/諾基亞.*/},{goodsname:1});
8: 用$where表達式來查詢例: db.goods.find({$where:'this.catid != 3 && this.catid != 11'});
注意: 用$where查詢時, mongodb是把bson結構的二進制數據轉換為json結構的對象,然后比較對象的屬性是否滿足表達式.
速度較慢
Update時可用的操作符例:->db.user.insert({name:'lisi',age:12,sex:'male',height:123,area:'haidian'});->db.user.update({name:'lisi'},{$set:{area:'chaoyang'},$unset:{height:1},$inc:{age:1},$rename:{sex:'gender'}});
db.user.find();
{ "_id" : ObjectId("51fc01c4f5de93e1f2856e33"), "age" : 13, "area" : "chaoyang
總結
以上是生活随笔為你收集整理的mongodb不等于某个值_MongoDB的安装以及基本增删改查命令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苹果、AMD、NV三大客户砍单 台积电也
- 下一篇: chrome修改js数据怎么生效_chr