1、insert 新增
db.student.insert({"name":"pp"})
2、update
a)整个更新
db.student.update({filter},{replace dict})
b)$inc自增修改器,如果键不存在,则增加一个属性
db.student.update({filter},{"$inc":{"score":1}}) score属性自增1
c)$set修改器,没有就添加,有就修改
db.student.update({filter},{"$set":{"age":"27}})
d)$unset修改器,用来删除某一个属性
db.student.update({filter},{"$unset":{"age":1})
e)$push修改器,修改数组类型,如果没有自动创建一个数组,
否则往数组中添加该值,如果键值对将生成多个数组
db.student.update({"name":"pp"},{"$push":{"score":60,"age":27}})
db.student.find()
>>>>{"name":"pp","score":[60],"age":[27]}
db.student.update({"name":"pp"},{"$push":{"score":61,"age":28}})
>>>>{"name":"pp","score":[60,61],"age":[27,28]}
f)$addToSet修改器,修改数组类型,如果某键对应的数组没有该值就添加,
有就不做处理,可以避免添加重复的值
g)$addToSet和$each为数组添加多个元素
db.student.update({"name":"pp"},{"$addToSet":{
"score":{"$each":[89,90,91]}
}})
db.student.find({"name":"pp"})
>>>>{"name":"pp","score":[60,61,89,90,91],"age":[27,28]}
h)$pop 对数组操作,从数组中删除一个元素 {$pop:{key:array index}}
删除首个元素
db.student.update({"name":"pp"},{$pop:{score:-1}})
删除最后一个元素
db.student.update({},{$pop:{score:1}})
i)$pull 对数组操作,删除数组中值匹配的元素,如果有重复的元素,
键一起删除如[1,2,3,1,1]删除1的话,将只剩下[2,3]
db.student.update({"name":"pp"},{$push:{score:61}})
db.student.update({"name":"pp"},{$push:{score:61}})
db.student.update({"name":"pp"},{$push:{score:61}})
db.student.update({"name":"pp"},{$push:{score:61}})
db.student.update({"name":"pp"},{$pull:{score:61}})
j)数组定位修改
{
name:"pp",
age:27,
score:60,
address:{
country:"china",
province:"jiangxi",
city:"pingxiang",
},
comments:[
{
author:"joe",
comment:"comment three",
vote:1
},
{
author:"joe",
comment:"comment three",
vote:1
},
{
author:"joe",
comment:"comment three",
vote:1
},
]
}
db.student.update({"comments.author":"joe"},{comments.$.vote:3}) 只更新第一条,更新条件的书写方式必须是comments.author
db.student.update({name:"pp"},{comments.0.author:"joe"}) 更新第一条
db.student.update({name:"pp"},{comments.1.author:"joe"}) 更新第二条
db.student.update({name:"pp"},{comments.2.author:"joe"}) 更新第三条
k)如果没有查找到更新,就插入当前这条记录,update的第三个参数
update({filter},{updict},isUpsert) isUpsert = true
db.student.update({"name":"jxm"},{$set:{"age":25}},true)
db.student.find({"name":"jxm"})
>>>{"name":"jxm","age":25}
h)save 保存,如果_id存在则更新,否则增加一条记录
var x = db.foo.findOne()
x.num = 42
db.foo.save(x)
l)多个文档更新,默认对查询到的结果只更新第一个,如果所有都要更新,可以设置update的第四个参数
db.student.update({},{$set:{"age":18}},false,true)
3、得到操作的错误
db.runCommand({"getLastError":1})
{
"err":null, //错误信息
"updatedExisting":true, //都是已经存在的文档
"n":5, //更新了5个文档
"ok":true
}
4、返回已经更新的文档 findAndModify
update 和 remove必须要一个,也只能是其中的一个
db.runCommand({
"findAndModify": 要操作的集合名称,
"query": 查询条件,
"sort":排序方式,
"remove":布尔类型 是否删除,
"update":{}, 更新
"new":布尔类型 默认返回更新前的文档
})
db.runCommand({
"findAndModify":"student",
"query":{"name":"pp"},
"remove":true
})
5、删除
remove
6、查找 find
a)find(query,{指定返回的键})
db.student.find({"name":"pp"},{"name":1}) 只返回name字段
db.student.find({"name":"pp"},{"_id":0,"name":0,"age":0}) 不返回"_id", name, age字段,其他字段都返回
b)findOne(query,{指定返回的键})
c)$lt 小于,$lte 小于等于,$gt 大于 ,$gte 大于等于,$ne 不等于
db.student.find({"age":{"$lte":30,"$gte":20}})
d)$in,$nin,$or
db.student.find({"age":{"$in":[30,,4,3,20]})
db.student.find({"$or":[{"age":{"$gte":20}},{"name":"pp"}]})
e)$mod 求余
查找年龄除以5余数为1的集合
db.student.find({"age":{"$mod":[5,1]}})
查找年龄除以5余数不为1的集合
db.student.find({"age":{"$not":{"$mod":[5,1]}}})
f)null值匹配本身,并且匹配不存在键值的记录
db.student.find({"age":null})
g)$exists
db.student.find({"age":{"$exists":true})
h)正则表达式
db.student.find({"name":/^p[a-z]*p$/})
i)数组查询 $all 多个组合条件查询
db.food.insert({"fruit":["apple","banana","peach"],"price":1})
db.food.find({"fruit":"apple"})
db.food.find({"fruit":{$all:["apple","banana"]}})
j)$size 数组长度查询
db.food.find({"fruit":{$size:3}})
k)$slice 返回数组中某一些记录,和之前不一样,使用$slice后,未提及的键也返回
db.food.find({},{fruit:{$slice:2}}) 返回前两个
返回
>>>{"fruit":["apple","banana"],"price":1}
db.food.find({},{fruit:{$slice:-2}}) 返回后两个
>>>{"fruit":["banana","peach"],"price":1}
db.food.find({},{fruit:{$slice:[1,2]}}) 返回后两个 {$slice:[startIndex,count]}
>>>{"fruit":["banana","peach"],"price":1}
h)内嵌文档 $elemMatch组合查询
{
name:"pp",
comments:{
"author":"joe",
"score":1
}
age:18
}
db.blog.find("comments":{$elemMath:{"author":"joe",score:{"$gte:5}}})
i)$where 负责查询
**.find({
$where:function(){
if(this.x>this.y){
return true;
}else{
return false;
}
}
})
j)find返回游标
var cursor = **.find(**)
游标的函数
cursor.hasNext 是否还有元素
cursor.next 取下一个元素
cursor.limit 取多少个
cursor.sort 排序 对字段排序 1表示升序,-1标示降序
cursor.skip 跳到第几个
7、建立索引
db.student.ensureIndex({"name":1,"age":1})
db.student.insert({"name":"pp"})
2、update
a)整个更新
db.student.update({filter},{replace dict})
b)$inc自增修改器,如果键不存在,则增加一个属性
db.student.update({filter},{"$inc":{"score":1}}) score属性自增1
c)$set修改器,没有就添加,有就修改
db.student.update({filter},{"$set":{"age":"27}})
d)$unset修改器,用来删除某一个属性
db.student.update({filter},{"$unset":{"age":1})
e)$push修改器,修改数组类型,如果没有自动创建一个数组,
否则往数组中添加该值,如果键值对将生成多个数组
db.student.update({"name":"pp"},{"$push":{"score":60,"age":27}})
db.student.find()
>>>>{"name":"pp","score":[60],"age":[27]}
db.student.update({"name":"pp"},{"$push":{"score":61,"age":28}})
>>>>{"name":"pp","score":[60,61],"age":[27,28]}
f)$addToSet修改器,修改数组类型,如果某键对应的数组没有该值就添加,
有就不做处理,可以避免添加重复的值
g)$addToSet和$each为数组添加多个元素
db.student.update({"name":"pp"},{"$addToSet":{
"score":{"$each":[89,90,91]}
}})
db.student.find({"name":"pp"})
>>>>{"name":"pp","score":[60,61,89,90,91],"age":[27,28]}
h)$pop 对数组操作,从数组中删除一个元素 {$pop:{key:array index}}
删除首个元素
db.student.update({"name":"pp"},{$pop:{score:-1}})
删除最后一个元素
db.student.update({},{$pop:{score:1}})
i)$pull 对数组操作,删除数组中值匹配的元素,如果有重复的元素,
键一起删除如[1,2,3,1,1]删除1的话,将只剩下[2,3]
db.student.update({"name":"pp"},{$push:{score:61}})
db.student.update({"name":"pp"},{$push:{score:61}})
db.student.update({"name":"pp"},{$push:{score:61}})
db.student.update({"name":"pp"},{$push:{score:61}})
db.student.update({"name":"pp"},{$pull:{score:61}})
j)数组定位修改
{
name:"pp",
age:27,
score:60,
address:{
country:"china",
province:"jiangxi",
city:"pingxiang",
},
comments:[
{
author:"joe",
comment:"comment three",
vote:1
},
{
author:"joe",
comment:"comment three",
vote:1
},
{
author:"joe",
comment:"comment three",
vote:1
},
]
}
db.student.update({"comments.author":"joe"},{comments.$.vote:3}) 只更新第一条,更新条件的书写方式必须是comments.author
db.student.update({name:"pp"},{comments.0.author:"joe"}) 更新第一条
db.student.update({name:"pp"},{comments.1.author:"joe"}) 更新第二条
db.student.update({name:"pp"},{comments.2.author:"joe"}) 更新第三条
k)如果没有查找到更新,就插入当前这条记录,update的第三个参数
update({filter},{updict},isUpsert) isUpsert = true
db.student.update({"name":"jxm"},{$set:{"age":25}},true)
db.student.find({"name":"jxm"})
>>>{"name":"jxm","age":25}
h)save 保存,如果_id存在则更新,否则增加一条记录
var x = db.foo.findOne()
x.num = 42
db.foo.save(x)
l)多个文档更新,默认对查询到的结果只更新第一个,如果所有都要更新,可以设置update的第四个参数
db.student.update({},{$set:{"age":18}},false,true)
3、得到操作的错误
db.runCommand({"getLastError":1})
{
"err":null, //错误信息
"updatedExisting":true, //都是已经存在的文档
"n":5, //更新了5个文档
"ok":true
}
4、返回已经更新的文档 findAndModify
update 和 remove必须要一个,也只能是其中的一个
db.runCommand({
"findAndModify": 要操作的集合名称,
"query": 查询条件,
"sort":排序方式,
"remove":布尔类型 是否删除,
"update":{}, 更新
"new":布尔类型 默认返回更新前的文档
})
db.runCommand({
"findAndModify":"student",
"query":{"name":"pp"},
"remove":true
})
5、删除
remove
6、查找 find
a)find(query,{指定返回的键})
db.student.find({"name":"pp"},{"name":1}) 只返回name字段
db.student.find({"name":"pp"},{"_id":0,"name":0,"age":0}) 不返回"_id", name, age字段,其他字段都返回
b)findOne(query,{指定返回的键})
c)$lt 小于,$lte 小于等于,$gt 大于 ,$gte 大于等于,$ne 不等于
db.student.find({"age":{"$lte":30,"$gte":20}})
d)$in,$nin,$or
db.student.find({"age":{"$in":[30,,4,3,20]})
db.student.find({"$or":[{"age":{"$gte":20}},{"name":"pp"}]})
e)$mod 求余
查找年龄除以5余数为1的集合
db.student.find({"age":{"$mod":[5,1]}})
查找年龄除以5余数不为1的集合
db.student.find({"age":{"$not":{"$mod":[5,1]}}})
f)null值匹配本身,并且匹配不存在键值的记录
db.student.find({"age":null})
g)$exists
db.student.find({"age":{"$exists":true})
h)正则表达式
db.student.find({"name":/^p[a-z]*p$/})
i)数组查询 $all 多个组合条件查询
db.food.insert({"fruit":["apple","banana","peach"],"price":1})
db.food.find({"fruit":"apple"})
db.food.find({"fruit":{$all:["apple","banana"]}})
j)$size 数组长度查询
db.food.find({"fruit":{$size:3}})
k)$slice 返回数组中某一些记录,和之前不一样,使用$slice后,未提及的键也返回
db.food.find({},{fruit:{$slice:2}}) 返回前两个
返回
>>>{"fruit":["apple","banana"],"price":1}
db.food.find({},{fruit:{$slice:-2}}) 返回后两个
>>>{"fruit":["banana","peach"],"price":1}
db.food.find({},{fruit:{$slice:[1,2]}}) 返回后两个 {$slice:[startIndex,count]}
>>>{"fruit":["banana","peach"],"price":1}
h)内嵌文档 $elemMatch组合查询
{
name:"pp",
comments:{
"author":"joe",
"score":1
}
age:18
}
db.blog.find("comments":{$elemMath:{"author":"joe",score:{"$gte:5}}})
i)$where 负责查询
**.find({
$where:function(){
if(this.x>this.y){
return true;
}else{
return false;
}
}
})
j)find返回游标
var cursor = **.find(**)
游标的函数
cursor.hasNext 是否还有元素
cursor.next 取下一个元素
cursor.limit 取多少个
cursor.sort 排序 对字段排序 1表示升序,-1标示降序
cursor.skip 跳到第几个
7、建立索引
db.student.ensureIndex({"name":1,"age":1})