mongodb 基本操作
基本命令
查看有那些数据库:
show dbs;
选择某个库:
use db;
查看库下的表(暂且说成是表,mongodb中称表问文档):
show collections;
插入数据:
db.table.insert( {'name':'demo','sex':'m','age':18} );
(注意在插入数据时的数据类型)
插入数据可随意定义每行的结构,mongodb中没有固定的表结构
eg: db.table.insert( {'names':'demo','sexs':'m','age':20} );
查询数据:
db.table.find();
(在查询有条件的数据时,就要注意到数据类型的问题了)
eg:
db.table.insert( {'id':'123','age':18} );
db.table.insert( {'id':123 ,'age':20} );
db.table.find( {'id':123} ); # 只能查看到第二条数据
另外一些条件(如下用法):
$lt(小于),$lte(小于等于),$gt(大于),$gte(大于等于),$ne(不等于)
db.table.find( {'age':{ '$lt':19 } } )
排序:
db.table.find().sort( {'age':1} )
1 表示升序 -1 表示降序
分页:
db.table.find().limit(10).skip(20);
( skip 规定忽略几个,上述查询类似mysql中的 limit 20,10 )
查询数量:
db.table.count();
db.table.find( {'age':{'$lt':19} } ).count()
删除数据:
db.table.remove(); // 删除全部
db.table.remove( {'id':123} ); // 删除指定数据
更新数据:
db.table.update( {'id':123},{'age':25} )
// 查找id为123的数据,将其age字段更新为25
do.table.update( {'id':123} , {'age':22} ,true );
// 类似于mysql的 replace用法 存在则更新,不存在则添加
索引:
db.table.ensureIndex({'id':1}) // 创建索引
db.table.dropIndex({'id':1}) // 删除索引
db.table.ensureIndex({'id':1},{unique:true}); // 独立索引
db.table.ensureIndex({'id':1,'age':1}) // 联合索引
备份(使用 mongodump.exe 备份数据):
mongodump.exe -d learn -o backup (备份整个 learn 数据库)
mongodump.exe -d learn -c test -o backup (备份单独的表)
( -d 数据库 -c 数据表 -o 备份目录)
恢复数据库( 使用 mongorestore.exe 恢复):
mongorestore.exe -d lear -c test backup/learn/unicorns.bson
( -d 数据库 -c 数据表 )
导出数据:
mongoexport.exe -d test -c mapinfo -o export.dat ( 导出数据为json格式数据,默认格式 )
( -d 数据库 -c 表 -o 导出文件名)
mongoexport.exe -d test -c mapinfo –csv -f id,name -o csv.csv (导出数据为csv格式数据)
( -d 数据库 -c 表 –csv 导出为csv格式 -f 导出字段名 -o 导出文件名)
导入数据:
mongoimport.exe -d test -c mapinfo mapinfo.dat (导入 json 格式数据 ,默认格式)
(-d 数据库 -c 表 数据源)
mongoimport.exe -d test -c mapinfo –type csv –headerline –file csv.csv (导入csv格式数据)
( -d 数据库 -c 表 –type 类型 –headerline 不导入第一行 –file 数据源)
用户权限(在每个数据库下都会存在一个 system.indexes 的表,存储的就是用户信息,前提:设置mongodb成为需要权限访问限制):
use test;
db.adduser('username','password');
设置完毕之后再使用的话就需要验证用户了
db.auth('username','password'); // 输出为1 正确,0 用户名、密码不对
(超级管理员,使用超级管理员访问其他库需要先进入amdin库 再转到其他库)
use admin;
db.auth('username','password');
mongodb地理位置索引基本使用命令
1.显示数据库
show dbs;
2.显示集合
show collections
3.显示索引
db.coor1.getIndexes();
4.插入数据
> db.mapinfo.insert({"category" : "coffee","name" : "digoal coffee bar","loc" : [116.403119,39.914935]})
> db.mapinfo.insert({"category" : "coffee","name" : "digoal coffee bar","loc" : [116.414617,39.918034]})
> db.mapinfo.insert({"category" : "coffee","name" : "digoal coffee bar","loc" : [116.374373,39.918919]})
5.创建2d索引
db.coo1.ensureIndex({"coordinate" : "2d"},{"background" : true})
6.删除数据
db.logs.remove({'_id':ObjectId('4f29e4860b2e2ecb9910e304')})
这中方式是无法删除的,因为 mongodb的唯一id 不是作为一个字符串来存储的。,这个值通常是一个BSON对象id,因此,这个id对于集合中的每个
成员都是唯一的,如果用户插入一个document没有提供一个id,数据库将自动生成一个id,并存储在_id字段。
一个BSON ObjectID是由12个字节组成:4字节时间+3字节机器id+2字节进程id+3字节的数字
{ "_id" : ObjectId("4c691e72ed2a47b462dfa806") }
7.修改数据
db.mapinfo.update({"_id":ObjectId('53fbe67f1d0439077a1b7724')},{$set:{category:'tea'}})
8.geonear查询,可返回距离
db.runCommand({geoNear:"mapinfo", near:[116.403694,39.913607]})
9.geonear查询,可返回距离,增加条数限制num
db.runCommand({geoNear:"mapinfo", near:[116.403694,39.913607],num:1})
10.geonear查询, 增加条件
db.runCommand({geoNear:"mapinfo", near:[116.403694,39.913607],query:{category:"tea"}})