ObjectId
基本操作增刪改查
增: insert
介紹: mongodb存儲的是文檔,. 文檔是json格式的對象.
語法: db.collectionName.insert(document);
1: 增加單篇文檔
db.collectionName.insert({title:’nice day’});
db.person.insert({“name”:”yxl”,”age”:26})
2: 增加單個文檔,並指定_id
db.collectionName.insert({_id:8,age:78,name:’lisi’});
3. 增加多個文檔
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屬性
例4:數據格式如下(嵌套查詢)
/* 1 */ { "_id" : "550e0afa-ef96-4f97-991c-d3a5b8a6017c", "NewsCategory" : { "_id" : "1f263798-6c45-4910-a6f1-ff499b411cc0", "Name" : "體育新聞" }, "Comments" : [ { "_id" : "ae353f2e-cea6-4609-953d-43e188c44890", "Content" : "好看" } ], "CreateTime" : ISODate("2016-12-06T08:42:33.270Z") }
查詢Comments中_id="ae353f2e-cea6-4609-953d-43e188c44890"
db.News.find({"Comments._id":"ae353f2e-cea6-4609-953d-43e188c44890"})
查詢表達式:
1: 最簡單的查詢表達式
{filed:value} ,是指查詢field列的值為value的文檔
2: $ne --- != 查詢表達式
{field:{$ne: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]}
是指 所有條件都不滿足的文檔為真返回
db.user.find({$nor:[{name:"user1"},{age:20}]}) 查詢name不等於user1並且age不等於20
7:用正則表達式查詢 以”諾基亞”開頭的商品
例:db.goods.find({goods_name:/諾基亞.*/},{goods_name:1});
8: 用$where表達式來查詢
例: db.goods.find({$where:'this.cat_id != 3 && this.cat_id != 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", "gender" : "male", "name" : "lisi" }
$setOnInsert ->相當於mysql中的列的默認值
db.user.update({_id: "4"}, { $setOnInsert: { works: 5}}, {upsert: true})
執行insert操作時,操作給相應的字段賦值。
MongoDB語法與現有關系型數據庫SQL語法比較
MongoDB語法 MySql語法
db.test.find({'name':'foobar'}) <==> select * from test where name='foobar'
db.test.find() <==> select * from test
db.test.find({'ID':10}).count() <==> select count(*) from test where ID=10
db.test.find().skip(10).limit(20) <==> select * from test limit 10,20
db.test.find({'ID':{in:[25,35,45]}}) <==> select * from test where ID in (25,35,45)
db.test.find().sort({'ID':-1}) <==> select * from test order by ID desc
db.test.distinct('name',{'ID':{lt:20}}) <==> select distinct(name) from test where ID<20
db.test.group({key:{'name':true},cond:{'name':'foo'},reduce:function(obj,prev){prev.msum+=obj.marks;},initial:{msum:0}}) <==> select name,sum(marks) from test group by name
db.test.find('this.ID<20',{name:1}) <==> select name from test where ID<20
db.test.insert({'name':'foobar','age':25})<==>insert into test ('name','age') values('foobar',25)
db.test.remove({}) <==> delete * from test
db.test.remove({'age':20}) <==> delete test where age=20
db.test.remove({'age':{lt:20}}) <==> delete test where age<20
db.test.remove({'age':{lte:20}}) <==> delete test where age<=20
db.test.remove({'age':{gt:20}}) <==> delete test where age>20
db.test.remove({'age':{gte:20}}) <==> delete test where age>=20
db.test.remove({'age':{ne:20}}) <==> delete test where age!=20
db.test.update({'name':'foobar'},{set:{'age':36}}) <==> update test set age=36 where name='foobar'
db.test.update({'name':'foobar'},{$inc:{'age':3}}) <==> update test set age=age+3 where name='foobar'
注意以上命令大小寫敏感