MongoDB 基礎命令行


本文專門介紹MongoDB的命令行操作。其實,這些操作在MongoDB官網提供的Quick Reference上都有,但是英文的,為了方便,這里將其稍微整理下,方便查閱。

登錄和退出

mongo命令直接加MongoDB服務器的IP地址(比如:mongo 10.77.20.xx),就可以利用Mongo的默認端口號(27017)登陸Mongo,然后便能夠進行簡單的命令行操作。
至於退出,直接exit,然后回車就好了。
 
[plain] 
$ mongo 10.77.20.xx  
MongoDB shell version: 2.0.4  
connecting to: 10.77.20.xx/test  
> show collections  
> exit  
bye  
從以上可以看出,登錄后mongo會自動連上一個名為test的數據庫。如果這個數據庫不存在,那么mongo會自動建立一個名為test的數 據庫。上面的例子,由於Mongo服務器上沒有名為test的db,因此,mongo新建了一個空的名為test的db。其中,沒有任何 collection。
 

database級操作

2.1 查看服務器上的數據庫  
> show dbs  
admin   (empty)  
back_up (empty)  
blogtest    0.203125GB  
local   44.056640625GB  
test    (empty)  
  
2.2 切換數據庫  
切換到blogtest數據庫(從默認的test數據庫)  
> use blogtest  
switched to db blogtest  
mongo中,db代表當前使用的數據庫。這樣,db就從原來的test,變為現在的blogtest數據庫。  
  
2.3 查看當前數據庫中的所有集合  
> show collections  
book  
system.indexes  
user  
  
2.4 創建數據庫  
mongo中創建數據庫采用的也是use命令,如果use后面跟的數據庫名不存在,那么mongo將會新建該數據庫。不過,實際上只執行use命令后,mongo是不會新建該數據庫的,直到你像該數據庫中插入了數據。  
> use test2  
switched to db test2  
> show dbs  
admin   (empty)  
back_up (empty)  
blogtest    0.203125GB  
local   44.056640625GB  
test    (empty)  
到這里並沒有看到剛才新建的test2數據庫。  
> db.hello.insert({"name":"testdb"})  
該操作會在test2數據庫中新建一個hello集合,並在其中插入一條記錄。  
> show dbs  
admin   (empty)  
back_up (empty)  
blogtest    0.203125GB  
local   44.056640625GB  
test    (empty)  
test2   0.203125GB  
> show collections  
hello  
system.indexes  
這樣,便可以看到mongo的確創建了test2數據庫,其中有一個hello集合。  
  
2.5 刪除數據庫  
> db.dropDatabase()  
{ "dropped" : "test2", "ok" : 1 }  
> show dbs  
admin   (empty)  
back_up (empty)  
blogtest    0.203125GB  
local   44.056640625GB  
test    (empty)  
  
2.6 查看當前數據庫  
> db  
test2  

可以看出刪除test2數據庫之后,當前的db還是指向它,只有當切換數據庫之后,test2才會徹底消失。

 

collection級操作

3.1 新建collection  
> db.createCollection("Hello")  
{ "ok" : 1 }  
> show collections  
Hello  
system.indexes  
從上面2.4也可以看出,直接向一個不存在的collection中插入數據也能創建一個collection。  
> db.hello2.insert({"name":"lfqy"})  
> show collections  
Hello  
hello2  
system.indexes  
  
3.2 刪除collection  
> db.Hello.drop()  
true  
返回true說明刪除成功,false說明沒有刪除成功。  
> db.hello.drop()  
false  
不存在名為hello的collection,因此,刪除失敗。  
  
3.3 重命名collection  
將hello2集合重命名為HELLO  
> show collections  
hello2  
system.indexes  
> db.hello2.renameCollection("HELLO")  
{ "ok" : 1 }  
> show collections  
HELLO  
system.indexes  
  
3.4 查看當前數據庫中的所有collection  
>show collections  
  
3.5 建立索引在HELLO集合上,建立對ID字段的索引,1代表升序。  
>db.HELLO.ensureIndex({ID:1})  

Record級的操作

這一小節從這里開始,我們用事先存在的blogtest數據庫做測試,其中有兩個Collection,一個是book,另一個是user。
4.1 插入操作
 
[plain] 
4.1.1 向user集合中插入兩條記錄  
> db.user.insert({'name':'Gal Gadot','gender':'female','age':28,'salary':11000})  
> db.user.insert({'name':'Mikie Hara','gender':'female','age':26,'salary':7000})  
  
4.1.2 同樣也可以用save完成類似的插入操作  
> db.user.save({'name':'Wentworth Earl Miller','gender':'male','age':41,'salary':33000})  
 
4.2 查找操作
 
4.2.1 查找集合中的所有記錄
[plain] 
> db.user.find()  
{ "_id" : ObjectId("52442736d8947fb501000001"), "name" : "lfqy", "gender" : "male", "age" : 23, "salary" : 15 }  
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }  
{ "_id" : ObjectId("52453d8525e437dfea8fd4f5"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }  
{ "_id" : ObjectId("52453e2125e437dfea8fd4f6"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }  
{ "_id" : ObjectId("52454155d8947fb70d000000"), "name" : "not known", "sex_orientation" : "male", "age" : 13 }  
4.2.2 查找集合中的符合條件的記錄
[plain] 
(1)單一條件  
a)Exact Equal:  
查詢age為了23的數據  
> db.user.find({"age":23})  
{ "_id" : ObjectId("52442736d8947fb501000001"), "name" : "lfqy", "gender" : "male", "age" : 23, "salary" : 15 }
 
b)Great Than:  
查詢salary大於5000的數據  
> db.user.find({salary:{$gt:5000}})  
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }  
{ "_id" : ObjectId("52453d8525e437dfea8fd4f5"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }  
{ "_id" : ObjectId("52453e2125e437dfea8fd4f6"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }  
 
c)Fuzzy Match  
查詢name中包含'a'的數據  
> db.user.find({name:/a/})  
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }  
{ "_id" : ObjectId("52453d8525e437dfea8fd4f5"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }  
{ "_id" : ObjectId("52453e2125e437dfea8fd4f6"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }  

查詢name以G打頭的數據  
> db.user.find({name:/^G/})  
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }  
  
(2)多條件"與"  
查詢age小於30,salary大於6000的數據  
> db.user.find({age:{$lt:30},salary:{$gt:6000}})  
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }  
{ "_id" : ObjectId("52453d8525e437dfea8fd4f5"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }  
{ "_id" : ObjectId("52454155d8947fb70d000000"), "name" : "not known", "sex_orientation" : "male", "age" : 13, "salary" : 30000 }  
  
(3)多條件"或"  
查詢age小於25,或者salary大於10000的記錄  
> db.user.find({$or:[{salary:{$gt:10000}},{age:{$lt:25}}]})  
{ "_id" : ObjectId("52442736d8947fb501000001"), "name" : "lfqy", "gender" : "male", "age" : 23, "salary" : 15 }  
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }  
{ "_id" : ObjectId("52453e2125e437dfea8fd4f6"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }  
{ "_id" : ObjectId("52454155d8947fb70d000000"), "name" : "not known", "sex_orientation" : "male", "age" : 13, "salary" : 30000 }  
 
4.2.3 查詢第一條記錄
將上面的find替換為findOne()可以查找符合條件的第一條記錄。
[plain] 
將上面的find替換為findOne()可以查找符合條件的第一條記錄。  
> db.user.findOne({$or:[{salary:{$gt:10000}},{age:{$lt:25}}]})  
{  
    "_id" : ObjectId("52442736d8947fb501000001"),  
    "name" : "lfqy",  
    "gender" : "male",  
    "age" : 23,  
    "salary" : 15  
}  
4.2.4 查詢記錄的指定字段
[plain] 
查詢user集合中所有記錄的name,age,salary,sex_orientation字段  
> db.user.find({},{name:1,age:1,salary:1,sex_orientation:true})  
{ "_id" : ObjectId("52442736d8947fb501000001"), "name" : "lfqy", "age" : 23, "salary" : 15 }  
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "age" : 28, "salary" : 11000 }  
{ "_id" : ObjectId("52453d8525e437dfea8fd4f5"), "name" : "Mikie Hara", "age" : 26, "salary" : 7000 }  
{ "_id" : ObjectId("52453e2125e437dfea8fd4f6"), "name" : "Wentworth Earl Miller", "age" : 41, "salary" : 33000 }  
{ "_id" : ObjectId("52454155d8947fb70d000000"), "name" : "not known", "sex_orientation" : "male", "age" : 13, "salary" : 30000 }  
注意:這里的1表示顯示此列的意思,也可以用true表示。  
 
4.2.5 查詢指定字段的數據,並去重。
[plain] 
查詢gender字段的數據,並去掉重復數據  
> db.user.distinct('gender')  
[ "male", "female" ]  
 
4.2.6 對查詢結果集的操作
(1)Pretty Print  
為了方便,mongo也提供了pretty print工具,db.collection.pretty()或者是db.collection.forEach(printjson)  
> db.user.find().pretty()  
{  
    "_id" : ObjectId("52442736d8947fb501000001"),  
    "name" : "lfqy",  
    "gender" : "male",  
    "age" : 23,  
    "salary" : 15  
}  
{  
    "_id" : ObjectId("52453cfb25e437dfea8fd4f4"),  
    "name" : "Gal Gadot",  
    "gender" : "female",  
    "age" : 28,  
    "salary" : 11000  
}  
{  
    "_id" : ObjectId("52453d8525e437dfea8fd4f5"),  
    "name" : "Mikie Hara",  
    "gender" : "female",  
    "age" : 26,  
    "salary" : 7000  
}  
{  
    "_id" : ObjectId("52453e2125e437dfea8fd4f6"),  
    "name" : "Wentworth Earl Miller",  
    "gender" : "male",  
    "age" : 41,  
    "salary" : 33000  
}  
{  
    "_id" : ObjectId("52454155d8947fb70d000000"),  
    "name" : "not known",  
    "sex_orientation" : "male",  
    "age" : 13  
} 
 
(2)指定結果集顯示的條目  
a)顯示結果集中的前3條記錄  
> db.user.find().limit(3)  
{ "_id" : ObjectId("52442736d8947fb501000001"), "name" : "lfqy", "gender" : "male", "age" : 23, "salary" : 15 }  
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }  
{ "_id" : ObjectId("52453d8525e437dfea8fd4f5"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }  
b)查詢第1條以后的所有數據  
> db.user.find().skip(1)  
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }  
{ "_id" : ObjectId("52453d8525e437dfea8fd4f5"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }  
{ "_id" : ObjectId("52453e2125e437dfea8fd4f6"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }  
{ "_id" : ObjectId("52454155d8947fb70d000000"), "name" : "not known", "sex_orientation" : "male", "age" : 13, "salary" : 30000 }  
 
c)對結果集排序  
升序  
> db.user.find().sort({salary:1})  
{ "_id" : ObjectId("52442736d8947fb501000001"), "name" : "lfqy", "gender" : "male", "age" : 23, "salary" : 15 }  
{ "_id" : ObjectId("52453d8525e437dfea8fd4f5"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }  
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }  
{ "_id" : ObjectId("52454155d8947fb70d000000"), "name" : "not known", "sex_orientation" : "male", "age" : 13, "salary" : 30000 }  
{ "_id" : ObjectId("52453e2125e437dfea8fd4f6"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 } 
降序  
> db.user.find().sort({salary:-1})  
{ "_id" : ObjectId("52453e2125e437dfea8fd4f6"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }  
{ "_id" : ObjectId("52454155d8947fb70d000000"), "name" : "not known", "sex_orientation" : "male", "age" : 13, "salary" : 30000 }  
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }  
{ "_id" : ObjectId("52453d8525e437dfea8fd4f5"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }  
{ "_id" : ObjectId("52442736d8947fb501000001"), "name" : "lfqy", "gender" : "male", "age" : 23, "salary" : 15 }  
4.2.7 統計查詢結果中記錄的條數
[plain] 
(1)統計集合中的所有記錄條數  
> db.user.find().count()  
5  
(2)查詢符合條件的記錄數  
查詢salary小於4000或大於10000的記錄數  
> db.user.find({$or: [{salary: {$lt:4000}}, {salary: {$gt:10000}}]}).count()  
 
4.3 刪除操作
 
4.3.1 刪除整個集合中的所有數據
[plain] 
> db.test.insert({name:"asdf"})  
> show collections  
book  
system.indexes  
test  
user  
到這里新建了一個集合,名為test。  
刪除test中的所有記錄。  
> db.test.remove()  
PRIMARY> show collections  
book  
system.indexes  
test  
user  
> db.test.find()  
可見test中的記錄全部被刪除。  
注意db.collection.remove()和drop()的區別,remove()只是刪除了集合中所有的記錄,而集合中原有的索引等信息還在,而drop()則把集合相關信息整個刪除(包括索引)。
 
4.3.2 刪除集合中符合條件的所有記錄
[plain] 
> db.user.remove({name:'lfqy'})  
> db.user.find()  
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }  
{ "_id" : ObjectId("52453d8525e437dfea8fd4f5"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }  
{ "_id" : ObjectId("52453e2125e437dfea8fd4f6"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }  
{ "_id" : ObjectId("52454155d8947fb70d000000"), "name" : "not known", "sex_orientation" : "male", "age" : 13, "salary" : 30000 }  
  
> db.user.find()  
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }  
{ "_id" : ObjectId("52453d8525e437dfea8fd4f5"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }  
{ "_id" : ObjectId("52453e2125e437dfea8fd4f6"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }  
{ "_id" : ObjectId("52454155d8947fb70d000000"), "name" : "not known", "sex_orientation" : "male", "age" : 13, "salary" : 30000 }  
{ "_id" : ObjectId("52455cc825e437dfea8fd4f8"), "name" : "2", "gender" : "female", "age" : 28, "salary" : 2 }  
{ "_id" : ObjectId("52455d8a25e437dfea8fd4fa"), "name" : "1", "gender" : "female", "age" : 28, "salary" : 1 }  
> db.user.remove( {salary :{$lt:10}})  
> db.user.find()  
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }  
{ "_id" : ObjectId("52453d8525e437dfea8fd4f5"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }  
{ "_id" : ObjectId("52453e2125e437dfea8fd4f6"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }  
{ "_id" : ObjectId("52454155d8947fb70d000000"), "name" : "not known", "sex_orientation" : "male", "age" : 13, "salary" : 30000 }  
 
4.3.3  刪除集合中符合條件的一條記錄
> db.user.find()  
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }  
{ "_id" : ObjectId("52453d8525e437dfea8fd4f5"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }  
{ "_id" : ObjectId("52453e2125e437dfea8fd4f6"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }  
{ "_id" : ObjectId("52454155d8947fb70d000000"), "name" : "not known", "sex_orientation" : "male", "age" : 13, "salary" : 30000 }  
{ "_id" : ObjectId("52455de325e437dfea8fd4fb"), "name" : "1", "gender" : "female", "age" : 28, "salary" : 1 }  
{ "_id" : ObjectId("52455de925e437dfea8fd4fc"), "name" : "2", "gender" : "female", "age" : 28, "salary" : 2 }  
> db.user.remove({salary :{$lt:10}},1)  
> db.user.find()  
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }  
{ "_id" : ObjectId("52453d8525e437dfea8fd4f5"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }  
{ "_id" : ObjectId("52453e2125e437dfea8fd4f6"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }  
{ "_id" : ObjectId("52454155d8947fb70d000000"), "name" : "not known", "sex_orientation" : "male", "age" : 13, "salary" : 30000 }  
{ "_id" : ObjectId("52455de925e437dfea8fd4fc"), "name" : "2", "gender" : "female", "age" : 28, "salary" : 2 }  
當然,也可以是db.user.remove({salary :{$lt:10}},true)  
 
4.4 更新操作
4.4.1 賦值更新
db.collection.update(criteria, objNew, upsert, multi )
criteria:update的查詢條件,類似sql update查詢內where后面的
objNew:update的對象和一些更新的操作符(如$,$inc...)等,也可以理解為sql update查詢內set后面的。
upsert : 如果不存在update的記錄,是否插入objNew,true為插入,默認是false,不插入。
multi : mongodb默認是false,只更新找到的第一條記錄,如果這個參數為true,就把按條件查出來多條記錄全部更新。
> db.user.find()  
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }  
{ "_id" : ObjectId("52453d8525e437dfea8fd4f5"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }  
{ "_id" : ObjectId("52453e2125e437dfea8fd4f6"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }  
{ "_id" : ObjectId("52454155d8947fb70d000000"), "name" : "not known", "sex_orientation" : "male", "age" : 13, "salary" : 30000 }  
{ "_id" : ObjectId("52455f8925e437dfea8fd4fd"), "name" : "lfqy", "gender" : "male", "age" : 28, "salary" : 1 }  
{ "_id" : ObjectId("5245607525e437dfea8fd4fe"), "name" : "lfqy", "gender" : "male", "age" : 28, "salary" : 2 }  
> db.user.update({name:'lfqy'},{$set:{age:23}},false,true)  
> db.user.find()  
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }  
{ "_id" : ObjectId("52453d8525e437dfea8fd4f5"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }  
{ "_id" : ObjectId("52453e2125e437dfea8fd4f6"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }  
{ "_id" : ObjectId("52454155d8947fb70d000000"), "name" : "not known", "sex_orientation" : "male", "age" : 13, "salary" : 30000 }  
{ "_id" : ObjectId("52455f8925e437dfea8fd4fd"), "name" : "lfqy", "gender" : "male", "age" : 23, "salary" : 1 }  
{ "_id" : ObjectId("5245607525e437dfea8fd4fe"), "name" : "lfqy", "gender" : "male", "age" : 23, "salary" : 2 }  
db.user.find()  
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }  
{ "_id" : ObjectId("52453d8525e437dfea8fd4f5"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }  
{ "_id" : ObjectId("52453e2125e437dfea8fd4f6"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }  
{ "_id" : ObjectId("52454155d8947fb70d000000"), "name" : "not known", "sex_orientation" : "male", "age" : 13, "salary" : 30000 }  
{ "_id" : ObjectId("52455f8925e437dfea8fd4fd"), "name" : "lfqy", "gender" : "male", "age" : 23, "salary" : 1 }  
{ "_id" : ObjectId("5245607525e437dfea8fd4fe"), "name" : "lfqy", "gender" : "male", "age" : 23, "salary" : 2 }  
> db.user.update({name:'lfqy1'},{$set:{age:23}},true,true)  
> db.user.find()  
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }  
{ "_id" : ObjectId("52453d8525e437dfea8fd4f5"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }  
{ "_id" : ObjectId("52453e2125e437dfea8fd4f6"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }  
{ "_id" : ObjectId("52454155d8947fb70d000000"), "name" : "not known", "sex_orientation" : "male", "age" : 13, "salary" : 30000 }  
{ "_id" : ObjectId("52455f8925e437dfea8fd4fd"), "name" : "lfqy", "gender" : "male", "age" : 23, "salary" : 1 }  
{ "_id" : ObjectId("5245607525e437dfea8fd4fe"), "name" : "lfqy", "gender" : "male", "age" : 23, "salary" : 2 }  
{ "_id" : ObjectId("5245610881c83a5bf26fc285"), "age" : 23, "name" : "lfqy1" }  
> db.user.update({name:'lfqy'},{$set:{interest:"NBA"}},false,true)  
> db.user.find()  
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }  
{ "_id" : ObjectId("52453d8525e437dfea8fd4f5"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }  
{ "_id" : ObjectId("52453e2125e437dfea8fd4f6"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }  
{ "_id" : ObjectId("52454155d8947fb70d000000"), "name" : "not known", "sex_orientation" : "male", "age" : 13, "salary" : 30000 }  
{ "_id" : ObjectId("5245610881c83a5bf26fc285"), "age" : 23, "name" : "lfqy1" }  
{ "_id" : ObjectId("52455f8925e437dfea8fd4fd"), "age" : 23, "gender" : "male", "interest" : "NBA", "name" : "lfqy", "salary" : 1 }  
{ "_id" : ObjectId("5245607525e437dfea8fd4fe"), "age" : 23, "gender" : "male", "interest" : "NBA", "name" : "lfqy", "salary" : 2 } 
 
4.4.2 增值更新
> db.user.find()  
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }  
{ "_id" : ObjectId("52453d8525e437dfea8fd4f5"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }  
{ "_id" : ObjectId("52453e2125e437dfea8fd4f6"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }  
{ "_id" : ObjectId("52454155d8947fb70d000000"), "name" : "not known", "sex_orientation" : "male", "age" : 13, "salary" : 30000 }  
{ "_id" : ObjectId("5245610881c83a5bf26fc285"), "age" : 23, "name" : "lfqy1" }  
{ "_id" : ObjectId("52455f8925e437dfea8fd4fd"), "age" : 23, "gender" : "male", "interest" : "NBA", "name" : "lfqy", "salary" : 1 }  
{ "_id" : ObjectId("5245607525e437dfea8fd4fe"), "age" : 23, "gender" : "male", "interest" : "NBA", "name" : "lfqy", "salary" : 2 }  
> db.user.update({gender:'female'},{$inc:{salary:50}},false,true)  
> db.user.find()  
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11050 }  
{ "_id" : ObjectId("52453d8525e437dfea8fd4f5"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7050 }  
{ "_id" : ObjectId("52453e2125e437dfea8fd4f6"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }  
{ "_id" : ObjectId("52454155d8947fb70d000000"), "name" : "not known", "sex_orientation" : "male", "age" : 13, "salary" : 30000 }  
{ "_id" : ObjectId("5245610881c83a5bf26fc285"), "age" : 23, "name" : "lfqy1" }  
{ "_id" : ObjectId("52455f8925e437dfea8fd4fd"), "age" : 23, "gender" : "male", "interest" : "NBA", "name" : "lfqy", "salary" : 1 }  
{ "_id" : ObjectId("5245607525e437dfea8fd4fe"), "age" : 23, "gender" : "male", "interest" : "NBA", "name" : "lfqy", "salary" : 2 }  

關於更新操作(db.collection.update(criteria, objNew, upsert, multi )),要說明的是,如果upsert為true,那么在沒有找到符合更新條件的情況下,mongo會在集合中插入一條記錄其值滿足更新條件的記錄(其中的 字段只有更新條件中涉及的字段,字段的值滿足更新條件),然后將其更新(注意,如果更新條件是$lt這種不等式條件,那么upsert插入的記錄只會包含 更新操作涉及的字段,而不會有更新條件中的字段。這也很好理解,因為沒法為這種字段定值,mongo索性就不取這些字段)。如果符合條件的記錄中沒有要更 新的字段,那么mongo會為其創建該字段,並更新。
上面大致介紹了MongoDB命令行中所涉及的操作,只是為了記錄和查閱。


免責聲明!

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



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