插入
- 插入一条数据
db.mytest.insertOne({name:"妖巳",age:5})
返回document
{
"acknowledged" : true,
"insertedId" : ObjectId("56fc40f9d735c28df206d078")
}
- 插入多条数据
db.mytest.insertMany([{name:'timecoder'},{name:'joe',age:18,times:159}])
返回document
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("562a94d381cb9f1cd6eb0e1a"),
ObjectId("562a94d381cb9f1cd6eb0e1b"),
ObjectId("562a94d381cb9f1cd6eb0e1c")
]
}
- 可以插入一条也可以插入多条,返回WriteResult
db.mytest.insert([{name:'timecoder'},{name:'joe',age:18,times:159}])
删除
- 删除集合
db.mytest.drop()
- 删除一条数据
db.mytest.deleteOne({status:"A"})
- 删除多条数据
db.mytest.deleteMany({status:"A"})
- 删除多条或一条数据
db.mytest.remove()//删除所有
db.mytest.remove({status:"A"},{justOne:true})//删除一条
db.mytest.remove({status:"A"})//删除多条
更新
- 更新格式
查询条件和查询的语法一样,会在后面查询中做详细记录
db.mytest.update({查询条件},{更新的内容},{操作选项})
- 更新一条记录
$set 当文档中不存在 age 字段的时候会添加
db.mytest.update({},{ $set: { name:"张佳宁2" ,age:5,size:32,shows22:"afan"} })
db.mytest.updateOne({},{ $set: { name:"张佳宁2" ,age:5,size:32,shows22:"afan"} })
- 更新多条记录
//multi=true 表示更新多条
db.mytest.update({},{ $set: { name:"张佳宁2" ,age:5,size:32} },{ multi: true })
db.mytest.updateMany({},{ $set: { name:"张佳宁2" ,age:5,size:32,shows22:"afan"} })
- 更新并插入
//更新多条,且如果没有匹配到type=9的文档时插入,upsert默认为false
db.mytest.update({type:9},{ $set: { name:"张佳宁2" } },{ multi: true,upsert:true})
- 或条件更新
//相当于sql: update set name="张佳宁" where type=1 or type=2
db.mytest.updateMany({$or:[{type:1},{type:2}]},{ $set: { name:"张佳宁" } })
- 且条件更新
db.mytest.update({type:9,age:32},{ $set: { age:5} },{ multi: true})
- field更新操作符
$set 修改field值,当不存在的时候则新增
$inc 加法操作,当不存在field则新增
db.mytest.update({type:9},{ $inc: { age:5} },{ multi: true})//age会+5
$mul 乘法操作,当不存在field则新增
$rename field重命名操作,当不存在field则不操作
db.mytest.update({type:9},{ $rename: { age:"age4"} },{ multi: true})//age会重命名为age4
$setOnInsert 当且仅当upsert:true 且 $set的field不存在需要新增时,该操作才会生效
db.mytest.update(
{type:9},
{ $set:{age:5},$setOnInsert: { ageIN:777} },
{ multi: true,upsert:true}
)
$unset 删除field
db.mytest.update({type:9},{ $unset:{age:""} },{ multi: true})
$min 小于操作,当$minage<集合中的age会生效
//比如原来age=20的会被更新为5,而age=4的不会被更新
db.mytest.update({type:9},{ $min:{age:5} },{ multi: true})
$max 大于操作,用法同$min
$currentDate 设置当前日期,默认为date,需要timestamp时需要单独指定
db.mytest.update(
{type:9},
{ $currentDate: {mydate:true,mystamp:{$type:"timestamp"}}},
{ multi: true}
)
- array更新操作符(即field为数组时才生效)
$addToSet 当数组元素中不存在需要添加的元素时才会被添加
db.mytest.update({type:9},{ $addToSet: {colors:"yellow" } },{ multi: true})
$pop 移除数组的第一个或最后一个元素
db.mytest.update({type:9},{ $pop: {colors:1 } },{ multi: true})//移除最后一个
db.mytest.update({type:9},{ $pop: {colors:-1 } },{ multi: true})//移除第一个
$pullAll 移除多个指定数组元素
db.mytest.update(
{type:9},
{ $pullAll: {colors:["red","yellow"] } },
{ multi: true}
)//移除最后一个
$pull 移除指定条件的元素,只能是单个
//移除colorsvalue大于6的数组元素
db.mytest.update( {type:9 }, { $pull: { colorsvalue: { $gt: 6 } } } )
//移除colors为red的数组元素
db.mytest.update( {type:9 }, { $pull: { colors: "red" } } )
$push 添加一个元素到数组
db.mytest.update({type:9},{ $push: {colors:["fu"] } },{ multi: true})
$each 配合$push和$addToSet添加多个数组元素
//添加多个
db.mytest.update(
{type:9},
{ $push: {colors:{$each:[["fu2"],"red1","re2d"]} } },
{ multi: true}
)
//当不存在才添加
db.mytest.update(
{type:9},
{ $addToSet: {colors:{$each:[["fu2"],"red1","re2d"]} } },
{ multi: true}
)
查询
- 查询所有
db.mytest.find()
- 比较条件
比较操作符 | sql操作符 |
---|---|
$eq | = |
$gt | > |
$gte | >= |
$lt | < |
$lte | <= |
$ne | != |
$in | in(x,x,x) |
$nin | not in(x,x,x) |
db.mytest.find({type:9}) //select * from mytest where type=9
db.mytest.find({type:{$eq: 8}}) //select * from mytest where type=9
db.mytest.find({type:{$gt: 8}})//select * from mytest where type>9
db.mytest.find({type:{$in: [9,3]}})
- 逻辑条件
逻辑操作符 | sql操作符 | 描述 |
---|---|---|
$or | or | |
$and | and | |
$not | not | 逻辑非,与其他操作符搭配使用 |
$nor | 同not | 支持多个表达式的非 |
$and $or
// select* from mytest where type>9 or type < 5
db.mytest.find({ $or: [{ type: { $gt: 9 } }, { type: { $lt: 5 } }] })
// select* from mytest where type>5 and type < 9
db.mytest.find({ $and: [{ type: { $lt: 9 } }, { type: { $gt: 5 } }] })
db.mytest.find( {
$and : [
{ $or : [ { type : 6 }, { type :5 } ] },
{ $or : [ { age : 15 }, { age : { $lt : 20 } } ] }
]
} )
//select * from mytest where (type=6 or type=5) and (age=15 or age<20)
$not
type小于6或者等于6或者==type不存在的文档==
db.mytest.find( { type: { $not: { $gt: 6 } } } )
$nor
//select * from mytest where type!=9 and age !=15
db.mytest.find( { $nor: [ { type: 9 }, { age: 15 } ] } )
参考
- sql和mogodb映射
- MongoDB官方文档
- 愿风指引你的道路