创建、切换数据库: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()// 删除所有索引