mongodb创建、更新、删除(学习笔记一)
2016-12-03 本文已影响0人
幸福镰刀
启动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: 当符合查询条件的文档不存在时,就会以这个查询条件和这个更新文档为 基础创建一个新文档;如果找到匹配的文档,则正常更新
multi: 是否要更新所有满足条件的文档
//文档替换
db.foo.update({name: "Tom"}, {name: "Jim"})
//$inc 为文档中某个字段增加一个定值
db.foo.update({name: "Tom"}, {$inc: {age: 1}})
//$set 用来制定一个字段的值,如果这个字段不存在就创建它
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 会在数组的末尾添加元素,没有就创建一个
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时,并且发生了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}})})