MongoDB的ObjectId和基本操作增刪改查(3)


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'

注意以上命令大小寫敏感


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM