例1:javascript
db.getCollection('bond_sentiment_news').find({"source" : 2,"siteUrl" : "http://www.21jingji.com/"}).forEach(
function(item){
db.getCollection('bond_sentiment_news').update({"_id":item._id},{$set:{"siteName":"21经济网"}})
}
)
例2:php
db.getCollection('my_booking').find({"hospitalName":/xx医院/,openId:/^2/}).forEach(
function(item){
db.getCollection('my_booking').update({"_id":item._id},{$set:{"payType": "1"}})
}
)
查询出hospitalName是xx医院和openId以2开头的全部记录,而且更新my_booking表中的payType为1.css
例3:java
db.getCollection('my_booking').find({"hospitalName":/运城市中心医院/,openId:{$not:/^2/}}).forEach(
function(item){
db.getCollection('my_booking').update({"_id":item._id},{$set:{"outTradeNo1": item.outTradeNo2}})
}
)
查询出xx医院和不已2开头的openId的全部记录,而且将每条记录的outTradeNo2赋值给outTradeNo1. web
// 插入语法
db.[collectionName].insert({})
// example
db.sample.insert({name:"mongo"})
sample结果:
mongodb
2. 批量插入文档
shell 这样执行是错误的 db.[collectionName].insert([{},{},{},……..]),这样仅能够插入第一条数据。
如图:
shell
shell 不支持批量插入
想完成批量插入能够用MongoDB的应用驱动或是shell的for循环
3.Save操做
save操做和insert操做区别在于当遇到_id相同的状况下
save完成保存操做
insert则会报错
如图:
数据库
db.[collectionName].remove({})
db.[collectionName].remove({key:value})
删除集合sample中name等于c的纪录数组
db.sample.remove({name:"c"})
3.小技巧
若是你想清除一个数据量十分庞大的集合直接删除该集合而且从新创建索引的办法比直接用remove的效率会高不少ruby
// 语法
db.[collectionName].update({查询器},{修改器})
此种文档更新方式,会用新的文档代替老的文档,所以要明确是不是真的符合本身的需求。
强硬的更新会用新的文档代替老的文档
2. insertOrUpdate操做
目的:查询器查出来数据就执行更新操做,查不出来就替换操做
作法:
db.[collectionName].update({查询器},{修改器},true)
第三个参数设置为true,表明insertOrUpdate,即存在即更新,不然插入该数据
3. 批量更新操做
默认状况下,当查询器查询出多条符合条件的数据时,默认修改第一条数据。那么如何实现批量修改?
语法:
db.[collectionName].update({查询器},{修改器},false, true)
即添加第四个参数,该参数为true,则批量更新,为false,则更新一条
4.1 $set修改器
$set修改器用来指定一个键值对,若是存在键就进行修改不存在则进行添加。
// 修改器名称:$set
// 语法:
{$set:{field: value}}
// example:
{$set:{name:"Redis"}}
4.2inc修改器inc修改器只是使用与数字类型,他能够为指定的键对应的数字类型的数值进行加减操做.
// 修改器名称:$inc
// 语法:
{ $inc : { field : value } }
// example:
{ $inc : { "count" : 1 } }
案例:
4.3 unset修改器unset修改器用法很简单,就是删除指定的键值对。
// 修改器名称:$unset
// 语法:
{ $unset: { field : 1} }
// example:
{ $unset : { "age" : 1 } }
案例:
4.4 $push修改器
$push修改器用法:
1.若是指定的键是数组增追加新的数值
2.若是指定的键不是数组则中断当前操做Cannot apply $push/$pushAll modifier to non-array
3.若是不存在指定的键则建立数组类型的键值对
4.此方法可添加剧复数据
// 修改器名称:$push
// 语法:{ $push : { field : value } }
// example:
{ $push : { language:"Oracle"}
下面对用法一一举例:
若是指定的键是数组增追加新的数值:
若是指定的键不是数组则中断当前操做:
若是不存在指定的键则建立数组类型的键值对:
此方法可添加剧复数据:
4.5 $pushAll
修改器
$pushAll
修改器用法和$push
类似他能够批量添加数组数据
便可以添加整个数组,以下:
// 修改器名称:$pushAll
// 语法:{ $pushAll : { field : array} }
// example:
{ $pushAll : { database:["Oracle","MySQL"]}
案例:
4.6 $addToSet
修改器
$addToSet
修改器是若是目标数组存在此项则不操做,不存在此项则加进去,即不添加剧复数据。
// 修改器名称:$addToSet
// 语法:{ $addToSet: { field : value } }
// example:
{ $addToSet: { database:"Oracle"}
案例:
4.7 $pop
修改器
$pop
修改器从指定数组删除一个值1删除最后一个数值,-1删除第一个数值。
// 修改器名称:$pop
// 语法:{ $pop: { field : value } }
// example:
{ $pop: { database:1}
案例:
4.8 $pull
修改器
$pull
修改器是删除一个被指定的数值。
// 修改器名称:$pull
// 语法:{ $pull: { field : value } }
// example:
{ $pull: { database: "Oracle"}
案例:
4.9 $pullAll
修改器
$pullAll
修改器是一次性删除多个指定的数值。
// 修改器名称:$pullAll
// 语法:{ $pullAll: { field : array} }
// example:
{ $pullAll: { database: ["MySQL","MongoDB"]}
案例:
4.10 $
数组定位符
1.$
数组定位器,若是数组有多个数值咱们只想对其中一部分进行操做咱们就要用到定位器($
)
// 修改器名称:$
// 语法:{ $set: { array.$.field : value} }
// example:
{ $set: { database.$.com : "sun"}
例若有文档:
{ “_id” : ObjectId(“5656d2876cc2cfd9ab5373b7”), “name” : “evers”, “age” : 25, “database” : [ { “type” : “Oracle”, “name” : “OracleDB” }, { “type” : “MySQL”, “name” : “MySQLDB” }, { “type” : “MongoDB”, “name” : “MongoDBDB” } ] }
咱们要把type等于MongoDB的文档增长一个做者author是Mongo
办法:
db.sample.update({"database.type":"MongoDB"},{$set:{"database.$.author":"Mongo"}})
$addToSet
与$each
结合完成批量数组更新db.sample.update({name:"evers"},{$addToSet:{database:{$each:["JS","DB","DB" ]}}})
$each
会循环后面的数组把每个数值进行$addToSet
操做
当document被建立的时候DB为其分配内存和预留内存,当修改操做不超过预留内层的时候则速度很是快反而超过了就要分配新的内存则会消耗时间。
runCommand能够执行mongoDB中的特殊函数,findAndModify就是特殊函数之一,他的做用是返回update或remove后的文档。
runCommand({"findAndModify":"processes",
query:{查询器},
sort{排序},
new:true
update:{更新器},
remove:true
}).value // example:
ps = db.runCommand({
"findAndModify":"sample",
"query":{"name":"evers"},
"update":{"$set":{"email":"1221"}},
"new":true
}).value
这里有一段摘自MongoDB权威指南的findAndModify函数的介绍: findAndModify的调用方式和普通的更新略有不一样,还有点慢,这是由于它要等待数据库的响应。这对于操做查询以及执行其余须要取值和赋值风格的原子性操做来讲是十分方便的。 findAndModify命令中每一个键对应的值以下所示。 findAndModify 字符窜,集合名。 query 查询文档,用来检索文档的条件。 sort 排序结果的条件。 update 修改器文档,对所找到的文档执行的更新。 remove 布尔类型,表示是否删除文档。 new 布尔类型,表示返回的是更新前的文档仍是更新后的文档。默认是更新前的文档。 “update”和”remove”必须有一个,也只能有一个。要是匹配不到文档,这个命令会返回一个错误。 这个命令有些限制。它一次只能处理一个文档,也不能执行upsert操做,只能更新已有文档。 相比普通更新来讲,findAndModify速度要慢一些。大概耗时至关于一次查找,一次更新和一次getLastError顺序执行所需的时间。 db.runCommand(“findAndModify”:集合名,”query”:{查询条件},”upadte”:{修改器})