MongoDB-增删改
MongoDB的shell使用了Js引擎,因此能运行任意的Js程序。
MongoDB中常用基本数据类型:
null:空值或者不存在的字段
Boolean:true,false
数值型:{"x":NumberInt("3")} {"x":NumberLong("3")}
字符串:{"x":"foobar"}
日期:{"x":new Date()}
正则表达式::{"x":/foobar/i}
数组:{"x":["a","b","c"]}
内嵌文档:{"x":{"foo":"bar"}}
对象id:{"x":ObjectId()}
1、新增
insertOne:新增单个文档
db.collection.insertOne( <document>, { writeConcern: <document> } )
示例
var ALin={ "name":"A-Lin", "birthday":"1983-09-20", "nationality":"中国", "BirthPlace":"台湾台东", "constellation":"处女座", "Desc":"黄丽玲(A-Lin),1983年9月20日出生于台湾省台东市,台东阿美族原住民,中国台湾流行乐女歌手..." } db.stars.insertOne(ALin);
insertMany:批量新增
db.collection.insertMany( { [ <document 1> , <document 2>, ... ] }, { writeConcern: <document>, ordered: <boolean> } )
示例
var stars= [ { "name":"孙子涵", "birthday":"1992-06-11", "nationality":"中国", "BirthPlace":"大连", "constellation":"双子座", "Desc":"孙子涵,90后学生,90后唱作型男歌手。2011年8月6日发表了第一张个人专辑《一年一度的夏天》;荣获QQ音乐“2011年度新人奖”..." }, { "name":"王力宏", "birthday":"1976-05-17", "nationality":"美国", "BirthPlace":"纽约罗切斯特", "constellation":"金牛座", "Desc":"王力宏(Leehom Wang),1976年5月17日出生于美国纽约,籍贯浙江义乌..." } ] db.stars.insertMany(stars)
insert:新增单个或多个文档
db.collection.insert( <document or array of documents>, { writeConcern: <document>, ordered: <boolean> } )
示例
var star= [ { "name":"王菲", "birthday":"1969-08-08", "nationality":"中国", "BirthPlace":"北京", "constellation":"狮子座", "Desc":"王菲(Faye Wong),1969年8月8日出生于北京,中国女歌手、影视演员..." } ] db.stars.insert(star)
2、修改
updateOne:根据filter更新单个文档
db.collection.updateOne( <filter>, <update>, //只能使用更新操作符更新文档,例如:$set, $unset, $rename等.不能直接使用新文档替换整个旧文档 { upsert: <boolean>, writeConcern: <document> } )
示例
db.stars.updateOne( {"name":"王菲"}, {"$set":{"Desc":"1987年底,王菲由北京到香港定居,经朋友介绍拜戴思聪为师学习唱歌。1989年,她以《仍是旧句子》在香港出道..."}} )
updateMany:根据filter更新多个文档
db.collection.updateMany( <filter>, <update>, //只能使用更新操作符更新文档,例如:$set, $unset, $rename等.不能直接使用新文档替换整个旧文档 { upsert: <boolean>, writeConcern: <document> } )
示例
db.stars.updateMany( {"name":"王菲"}, {"$set":{"Desc":"1987年底,王菲由北京到香港定居,经朋友介绍拜戴思聪为师学习唱歌。1989年,她以《仍是旧句子》在香港出道..."}} )
replaceOne:根据filter替换单个文档
db.collection.replaceOne( <filter>, <replacement>, //只能是一个新文档,不能使用$set等操作符 { upsert: <boolean>, writeConcern: <document> } )
示例
db.stars.replaceOne( {"name":"王菲"}, { "name":"王菲", "birthday":"1969-08-08", "nationality":"中国", "BirthPlace":"北京", "constellation":"狮子座", "Desc":"1989年,她以《仍是旧句子》在香港出道。1991年初,她惜别歌坛,远赴美国修读音乐..." } )
update:更新集合中的一个或多个文档,既能更新指定字段也能替换整个文档
db.collection.update( <query>, <update>, { upsert: <boolean>, //存在修改,不存在新增,默认false multi: <boolean>, //是否修改多个文档,默认false writeConcern: <document> } )
示例
db.stars.update( {"name":"王菲"}, {"$set":{"Desc":"王菲(Faye Wong),1969年8月8日出生于北京,中国女歌手、影视演员..."}}, {"multi":true} //默认为false )
3、删除
Remove:从一个集合中移除一个或多个文档
db.collection.remove( <query>, <justOne> //是否删除单个,默认false )
示例
db.stars.remove({"name":"王菲"},true)
deleteOne:从集合中移除单个文档
db.collection.deleteOne( <filter>, { writeConcern: <document> } )
示例
db.stars.deleteOne({"name":"王菲"})
deleteMany:根据filter删除所有匹配的文档
db.collection.deleteMany( <filter>, { writeConcern: <document> } )
示例
db.stars.deleteMany({"name":"王菲"})
4、其他常用操作
save方法:文档存在则修改,不存在则新增
db.collection.save( <document>, { writeConcern: <document> } )
findOneAndReplace:根据filter和sort替换单个文档
db.collection.findOneAndReplace( <filter>, //条件 <replacement>, //新文档 { projection: <document>, //返回字段集合 sort: <document>, //排序 maxTimeMS: <number>, //超时时间 upsert: <boolean>, //存在修改,不存在新增,默认false returnNewDocument: <boolean> //是否返回新文档,默认false } )
findOneAndUpdate方法:根据filter和sort修改单个文档
db.collection.findOneAndUpdate( <filter>, //条件 <update>, //更新文档,只能使用更新操作符更新文档,例如:$inc、$mul、$rename、$setOnInsert、$set等 { projection: <document>, //返回字段集合 sort: <document>, //排序 maxTimeMS: <number>, //超时时间 upsert: <boolean>, //存在修改,不存在新增,默认false returnNewDocument: <boolean> //是否返回新文档,默认false } )
findAndModify方法:修改并返回单个文档
db.collection.findAndModify({ query: <document>, //条件 sort: <document>, //排序 remove: <boolean>, //是否移除旧文档,默认为false update: <document>, //更新文档,只能使用update操作符更新文档,例如:$inc、$mul、$rename、$setOnInsert、$set等 new: <boolean>, //是否返回新文档,默认为false fields: <document>, //待返回字段集合 upsert: <boolean>, //存在修改,不存在新增,默认false bypassDocumentValidation: <boolean>, writeConcern: <document> });
5、常用update操作符
$inc:自增操作符,只能用于数值型
db.stars.updateOne({"name":"王菲"},{"$inc":{"age":1}})
$mul:乘法,只能用于数值型
db.stars.updateOne({"name":"王菲"},{"$mul":{"age":2}})
$rename:对字段重命名
db.stars.updateOne({"name":"王菲"},{"$rename":{"age":"Age"}})
$setOnInsert:upsert参数为true时触发,为false的时候不执行
db.stars.update({"name":"王菲"},{"$set":{"age":"47"},"$setOnInsert":{"Job":"歌手"}},{"upsert":true})
$set:设置文档中字段的值
db.stars.update({"name":"王菲"},{"$set":{"age":48}})
$unset:移除文档中的一个字段
db.stars.update({"name":"王菲"},{"$unset":{"age":""}})
$min:在给定值与字段值之间取最小值
$max:在给定值与字段值之间取最大值
db.stars.update({"name":"王菲"},{"$max":{"age":40}})
$currentDate:设置某个字段的值为当前时间
db.stars.update({"name":"王菲"},{"$currentDate":{"birthday":{"$type":"date"}}})
type的值为:date、timestamp