啟動mongodb數據庫
mongod --dbpath data/db(數據目錄) --logpath log/mongod.log(日志文件) --logappend --fork(后臺運行)
啟動mongo shell:mongo
插入
db.collection.insert(obj, opt)
obj: 要插入的文檔
opt: 寫入的安全級別
//一般插入
db.foo.insert({name: "Tom"})
//批量插入
var bulk = db.foo.initializeUnorderedBulkOp()
bulk.insert({name: "Tom"})
bulk.insert({name: "Jim"})
bulk.execute()
//使用save()插入:如果文檔含有"_id",save會調用upsert琳省,否則調用insert
var x= db.foo.findOne()
x.name = "Tom"
db.foo.save(x)
刪除
db.collection.remove(query, justone)
query: 匹配條件迎吵,指明要刪除文檔的條件
justone: 使用此參數,只會刪除匹配到的第一個文檔
db.foo.remove({}) //刪除所有文檔
db.foo.remove({name: "Tom"}) //刪除集合中所有name為Tom的文檔
db.foo.remove({name: "Tom"}, 1) //刪除第一個匹配的文檔
db.foo.drop() //刪除整個集合
更新
db.collection.update(query, obj, upsert, multi)
query: 查詢條件针贬,指明要更新的文檔
obj: 更改的內容
upsert: 當符合查詢條件的文檔不存在時击费,就會以這個查詢條件和這個更新文檔為 基礎創(chuàng)建一個新文檔;如果找到匹配的文檔桦他,則正常更新
multi: 是否要更新所有滿足條件的文檔
//文檔替換
db.foo.update({name: "Tom"}, {name: "Jim"})
//$inc 為文檔中某個字段增加一個定值
db.foo.update({name: "Tom"}, {$inc: {age: 1}})
//$set 用來制定一個字段的值荡灾,如果這個字段不存在就創(chuàng)建它
db.foo.update({name: "Tom"}, {$set: {sex: "male"}})
//$unset 刪除一個字段
db.foo.update({name: "Tom"}, {$unset: {sex: 1}})
db.foo.update({name: "Tom"}, {$unset: {sex: ""}})
更新數組方法
//$push 會在數組的末尾添加元素,沒有就創(chuàng)建一個
db.foo.update({name: "Tom"}, {$push: {contact: {qq: "12345678", email: "tom@test.com", phone: "12867532987"}}})
db.foo.update({name: "Tom"}, {$push: {hobby: {$each: ["swimming", "shopping", "reading"]}}})
//$pop 從數組的頭("key": -1)或尾("key": 1)處刪除元素
db.foo.update({name: "Tom"}, {$pop: {hobby: -1}})
//$pull 基于特定條件來刪除元素瞬铸,會將所有匹配的文檔都刪除批幌,而不是指刪除一個
db.foo.update({name: "Tom"}, {$pull: {hobby: "shopping"}})
//$slice 設置數組的最大長度
db.foo.update({name: "Tom"},
{$push: {hobby: {
$each: ["shopping", "running", "swimming"],
$slice: -2 //只有最后兩個元素會保留
}}})
//$ne 如果數組沒有就添加進去
db.foo.update({hobby: {$ne: "reading"}}, {$push: {hobby: "reading"}})
//$addToSet 避免插入重復元素
db.foo.update({name: "Tom"},
{$addToSet: {
hobby: {
$each: ["swimming", "reading", "bowling"]
}
}})
//基于位置的數組修改
db.foo.update({name: "Tom"},
{$set: {"contact.0.qq2": "187976863"}}
)
db.foo.update({"contact.phone": "18676645434"},
{$unset:
{"contact.$.phone": "12346797578"}
})
//$setOnInsert 當upsert為true時,并且發(fā)生了insert操作嗓节,可以補充的字段
db.foo.update({}, {$setOnInsert: {name: "Tom"}}, true)
findAndModify 返回被更新的文檔
db.collection.findAndModify({
query: <document>, //查詢條件
sort: <document>, //排序結果的條件
remove: <boolean>, // remove 和 update必須指定一個
update: <document>, // remove 和 update必須指定一個
new: <boolean>, //返回更新前還是更新后的文檔荧缘,默認返回更新前的文檔
fields: <document>, //文檔中需要返回的字段
upsert: <boolean>, //默認為false
bypassDocumentValidation: <boolean>, //是否繞過文檔驗證,這可以讓您更新不符合驗證要求的文檔
writeConcern: <document>, //寫入安全機制
collation: <document> //集合名
});```
ps = db.runCommand({findAndModify: "foo",
query: {name: "Tom"},
update:({$set: {age: 22}})})