mogodb 基本常用sql操作

2017-03-14  本文已影响0人  快跑吧小姑娘快跑

插入

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")
   ]
}
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})

$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}
)

$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 } ]  } )

参考

上一篇下一篇

猜你喜欢

热点阅读