mongo 基本操作

创建、切换数据库:use <数据库名称>
创建一条集合:db .createColletion("yc")
查看数据:show tables

新建的数据库,如果里面不存在数据,则数据库只存在于内存当中,show dbs 查询不到目标数据库

删除数据库的命令:db .dropDatabase() --- 删除当前数据库里面的内容

删除集合:db ."yc".drop()

插入数据:db.yc.insert({name:"杨晨",age:28,gender:"男"}); 没有指定id的情况下会自动生成一个id,可以批量插入db.yc.insertOne({});插入一条数据

查看集合:show tables

查看集合中的数据:db.yc.find()

可以指定插入数据的id:db.yc.insert({_id:"workd",name:"杨晨",age:28,gender:"男"});

批量插入:
try{
    db.yc.insert([{name:"杨晨",age:28,gender:"男"}]);
}catch(e){

print(e)
}

这样一旦其中一条数据发生错误,便于定位

修改:

db.yc.update({_id:"workd"},{age:NumberInt(27)})  --- 覆盖修改

db.yc.update({_id:"work"},{$set:{age:NumberInt(27)}}) --- 局部修改

db.yc.update({name:"杨晨"},{$set:{age:NumberInt(18)}},{multi:true}) --- 批量修改,必须添加multi参数,否则只更新一条数据

计数器:++

db.yc.update({_id:"work"},{$inc:{age:NumberInt(1)}})

删除:db.yc.remove({_id:"workd"});db.yc.remove({}) --- 删除所有的数据

删除文档当中的某个字段:db.yc.update({"_id":ObjectId("617d234097091b2a02094914")}, {"$unset":{"name":1}}) ;1 --- 代表任意的合法数值
 
清屏:cls

----数组操作:

db.yc.insert({name:"杨晨",age:28,gender:"男","hobby":["跑步"]});

数组添加:db.yc.update({"name" : "李四"},{"$push":{"hobby":"跳舞"}})

数组删除:

db.yc.update({"name" : "李四"},{"$pop":{"hobby":1}}) --- 删除数组的最后一个元素

db.yc.update({"name" : "李四"},{"$pop":{"hobby":-1}}) --- 删除数组的第一个元素

db.yc.update({"_id" : ObjectId("617d2f80754b6d7de2b295a3")},{"$pull":{"hobby":[ "泡妞", "跳舞", "唱歌"]}}) --- 删除数组的指定位置的元素


db.yc.insert({_id:"workd",name:"杨晨",age:28,gender:"男",address:[{place:"西安",tel:"10086"},{place:"南京",tel:"10000"}]});


修改属性中数组中的某个属性值:db.yc.update({"_id" : "workd"},{"$set":{"address.1.tel":"777777"}})


数组的查询:

db.yc.find({"hobby":"喝酒"})

db.yc.find({"address":{place:"西安",tel:"10086"}})


包含多个查询条件:

db.yc.find({"hobby":{$all:["喝酒","睡觉"]}})

根据数组的长度查询:

db.yc.find({"hobby":{$size:2}})

指定字段查询:

db.yc.find({"_id" : ObjectId("617d2f80754b6d7de2b295a3")},{"name":1,"_id":0});只显示name字段,强制不显示_id字段

显示_id 字段:
db.yc.find({"_id" : ObjectId("617d2f80754b6d7de2b295a3")},{"name":1})

db.yc.find({"_id" : ObjectId("617d2f80754b6d7de2b295a3")});db.yc.findOne() 查询第一条数据

模糊查询:

db.yc.find({"name": /杨/})

统计查询:

db.yc.count()

字段是否存在:
db.yc.find({"name": {"$exists":true}})

取模运算:

db.yc.find({"age": {"$mod":[2,1]}})


分页:

limit:显示几条记录

skip:跳过几条记录

比如:

第一次查询:db.yc.find().limit(2)

第一次查询:db.yc.find().limit(2).skip(2)

综合排序:

db.yc.find().limit(2).skip(2).sort({age:1}) :升序

db.yc.find().limit(2).skip(2).sort({age:-1}) :降序

执行顺序:sort>skip>limit


聚合查询:

db.yc.aggregate(
    {$match:{"age":18}}
)

db.yc.aggregate(
    {$match:{"age":18}}, --- 条件
    {$limit:2},
    {$skip:0},  ---分页
    {$project:{_id:0,age:'$age'}}, --- 显示字段
    {$sort:{age:1}} --- 排序 --- 升序
)

db.yc.aggregate(
    {$match:{"age":18}},  --- 匹配条件
    {$group:{_id:null,sumage:{$sum:'$age'}}}   --- 分组求和,指定分组字段为null,则相当于不分组
)


db.yc.aggregate(
    [
        {"$match":{"_id" : "workd"}},
        {"$unwind":"$address"}
        
    ]

)

mongodb 支持多文档事务(ACID)

导入数据的命令:mongorestore -d tb /opt/stocks;

批量插入数据:

for(var i=1;i<=100;i++){
    db.yc.insert({name:"yc"+i,num:i})
}

查询 num=100:

db.yc.find({num:100})

分析查询语句:

db.yc.find({num:100}).explain(true)


创建匿名索引:

db.yc.createIndex({num:1})

查询已建立的索引:db.yc.getIndexes(),创建索引名称:字段_1 --- 正序;字段_-1 --- 倒序

创建命名索引: 倒序规则

db.yc.createIndex({name:-1},{name:'nameIndex'})


创建复合索引:

db.yc.createIndex({name:1,num:1},{name:'plusIndex'})


ttl 过期索引:

创建一个新的集合,并插入数据:db.newclass.insert({newtime:Date()})

创建索引:db.newclass.createIndex({newtime:1},{expireAfterSeconds:10})

二维索引:地理位置的索引

db.dili.insertMany([
    {"gis":[1,1]},
    {"gis":[1,2]},
    {"gis":[1,3]},
    {"gis":[2,1]},
    {"gis":[2,2]},
    {"gis":[2,3]},
    {"gis":[3,1]},
    {"gis":[3,2]},
    {"gis":[3,3]},
    
]);

创建二维索引:

db.dili.ensureIndex({gis:'2d'})

查询距离[1,1]最近的四个点:

db.dili.find({gis:{$near:[1,1]}}).limit(4)

查询距离[1,2]和[3,3]为对角线的正方形的所有点:

db.dili.find({gis:{$within:{$box:[[1,2],[3,3]]}}})

查询以[2,2],以1为半径规则下,落在圆的面积中的点:

db.dili.find({gis:{$within:{$center:[[2,2],1]}}})

删除索引:

db.yc.dropIndex(age:1)// 根据条件删除

db.yc.dropIndex("age_1")// 根据名称删除

db.yc.dropIndexes()// 删除所有索引

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值