MongoDB中 将表称为一个集合
mongod:
mongod --dbpath dir
//打开或者新建一个数据库 dir 为数据库目录
mongoimport:
mongimport --db test --collection user --drop --file C: ext.json
--db 导入的那个库
--collection 导入到那个表
--drop 表示清空原有文档
--file 要导入的文件
mongo:
use dbname
//进入一个库 若不存在则创建
show dbs
// 查看几个库
show collections
//查看所有集合
show tables
//查询数据库中的表
增
db.collectiongName.insert({x:1,y:2})
//在名为collectionName 的集合中插入一条文档 若集合不存在 则将新建该集合
db.collectionName.insert({time:new Date()})
//可以将当前系统时间插入到记录中
查
db.collectionName.findOne()
//返回第一个查找到的结果 等价于 find().limit(1)
db.collectionName.find()
//查找名为collectionName 的集合的所有记录
db.collectionName.find({k:v})
//查找k的值为v的记录
db.collectionName.find({k1:v1},{k2:v2})
//查找k1的值为v1 且 k2的值为v2的记录
db.collectionName.find({$ro:[{k1:v1},{k2:v2}]}) //查找k1的值为v1 或 k2的值为v2的记录
db.collectionName.find({k:{$gt:v}})
//查找k的值大于v的记录
db.collectionName.find({k:{$lt:v}})
//查找k的值小于v的记录
db.collectionName.find({k:{$gt:v1,$lt:v2}}) //查找k的值大于v1而且小于v2的记录
db.collectionName.find().limit(X)
//查找前X条
db.collectionName.find().skip(X)
//查找时跳过X条
db.collectionName.find({k:{$exists:true}})
//查找含有m字段的记录
改
db.collectionName.update({k1:v1},{k1:v2}) //查询k1:v1的记录 并将v1更新为v2
db.collectionName.update({k1:v1},{k2:v2}) //查询k1:v1的记录 将所有的记录用k2:v2覆盖
db.collectionName.update({k1:v1},{$set:{k2:v3}})
//查询k1:v1的记录 并将其中的k2的值更新为k3
db.collectionName.update({k1:v1},{k1:v2},{upsert=true})
//查询k1:v1的记录 若k1:v1不存在则创建 k1:v2 的记录
db.collectionName.update({k1:v1},{$set:{k1:v2}},{multi=true})
//查询k1:v1的记录 并将所有的记录的v1的值改为v2
删
记录
db.collectionName.remove({k:v})
//删除所有k值为v的记录
db.collectionName.remove({k:v},{justOne:true}) //删除第一个匹配到k值为v的记录
db.collectionName.remove({})
//清空集合但是不删除集合
集合
db.collectionName.drop()
//删除集合
库
db.dropDatabase()
//删除当前所在数据库
排序
db.collectionName.find().sort({k1:1},{k2:-1})
//先按照k1进行排序 若有相同次序则按照k2进行排序 1为正序 -1为倒序
统计
db.collectionName.find().count()
//将查询到的结果进行统计有多少条目录
索引(使用数据时尽量先创建索引以提高性能)
db.collectionName.getIndexes()
//获取表的索引情况
db.collectionName.dropIndex(Index)
//删除索引
ID索引
当添加记录时就已创建完成
单键索引
db.collectionName.ensureIndex({k:1})
//创建单键索引k 值代表方向 1为正序 -1为倒序
多键索引
当创建完单键索引之后 插入数组数据 单键索引就隐式的转换为多键索引
复合索引
db.collection.ensureIndex({k1:1,k2:1)
//当使用find({k1:v1,k2:v2) 就可以使用上面创建的索引了
过期索引
1 在一段时间后会过期的索引
2 索引过期之后 相应的数据就会被删除
3 创建方法
db.collectionName.ensureIndex({time:1},{expireAfterSeconds:10})
//expireAfterSeconds后方添加的是过期时间(单位:S)
过期索引的使用限制
1 存储在过期索引字段的值必须是指定的时间类型(必须是ISODate或者ISODate数组,不能使用时间戳,否则不能被自动删除)
2 如果指定了ISODate数组,则按照最小的时间进行删除
3 过期索引不能是复合索引
4 删除时因运行速度和内部删除机制等 会有误差(最大误差为60秒)
全文索引
全文索引的使用限制
1 每次查询都只能指定一个$text查询
2 $text查询不能出现在$nor查询中
3 查询中如果包括了$text,hint不再起作用
全文索引的创建
db.collectionName.ensureIndex({key:'text'})
//在某字段创建全文索引
db.collectionName.ensureIndex({key_1:'text',key_2:'text'})
//可以创建复合索引
db.collectionName.ensureIndex({"$**":'text'})
//在每个字段都创建全文索引
使用全文索引进行查询
db.collectionName.find({$text:{$search:"aa"}})
//查找关于coffee 的记录
db.collectionName.find({$text:{$search:"aa bb cc"}})
//查找关于aa 或 bb 或 cc 的记录
db.collectionName.find({$text:{$search:"aa bb -cc"}})
//查找关于aa 或 bb 但不包括cc 的记录
db.collectionName.find({$text:{$search:""aa" "bb" "cc""}})
//查找关于aa bb cc 的记录(且:都包含)的记录 使用引号进行查询 用反斜杠进行转义
全文索引相似度查询
db.db.collectionName.find({$text:{$search:"aa"}},{score:{$meta:"textScore"}}).sort({score:{$meta:"textScore"}})
//将与aa匹配的记录中计算相似度score 并使用sort() 将相似度排序 相似度从高到低排序
地理位置索引
位置表示方式:经纬度[经度,纬度] 取值范围: 经度[-180,180] 纬度[-90,90]
插入纬度 db.collectionName.insert({w:[经,纬]})
子分类
2d索引,用于储存和查找平面上的点
2dsphere索引,用于储存和查找球面上的点
查找方式
1 查找距离某个点一定距离内的点
2 查找包含在某区域内的点
2D索引:平面位置索引
创建方式
db.collectionName.ensureIndex({w:"2d"})
查询方式
1 $near查询:查询距离某个点最近的点
db.collectionName.find({w:{$near:[经,纬]}})
//返回一百个距离该点最近的点
db.collectionName.find({w:{$near:[经,纬],$maxBistance:num}})
//返回一百个距离该点最近的点 且 最大距离不超过 num
2 geoNear查询:$near查询的升级版
db.runCommand(
{geoNear:<collection>,
near:[x,y],
minDistance:(对2d索引无效)
maxDistance:
num:
......
}
)
3 $geoWithin查询:查询某个形状内的点
(1)$box:矩形,使用{$box:[[<x1>,<y1>],[<x2>,<y2>]]}表示 第一个坐标为矩形的左边界 第二个坐标为矩形的右边界
格式 db.collectionName.find({w:{$geoWithin:{$box:[[<x1>,<y1>],[<x2>,<y2>]]}}})
(2)$center:圆形,使用{$center:[[<x1>,<y2>],r]}表示
格式 db.collectionName.find({w:{$geoWithin:{$center:[[<x1>,<y2>],r]}}})
(3)$polygon:多边形,使用{$polygon:[[<x1>,<y1>],[<x2>,<y2>],[<x3>,<y3>]]}表示 每一个坐标为一个点 然后组成一个多边形
格式 db.collectionName.find({w:{$geoWithin:{$polygon:[[<x1>,<y1>],[<x2>,<y2>],[<x3>,<y3>]]}}})
2dsphere:球面地理位置索引
创建方式
db.collectionName.ensureIndex({w:"2dsphere"})
位置表示方式
GeoJSON:描述一个点,一条直线,多边形等形状
格式
{type:"",coordinates:[<coordinates>]}
查询方式
支持$maxDistance和$minDistance
索引的属性(名称,唯一性,稀疏性,是否定时删除)
名称的指定(删除时可以使用名字进行删除)
db.collectionName.ensureIndex({Index},{name:"Index_name"})
//将默认名称改为Index_name(指定索引名称为Index_name)
唯一性
db.collectionName.ensureIndex({Index},{unique:true/false})
//指定索引为唯一索引 当添加含索引字段的记录时 不允许添加相同的value值
稀疏性
db.collection.ensureIndex({Index},{sparse:true/false})
//在某条记录中若不存在字段 则不会创建索引 以减少磁盘占用并提高性能
当查找该记录时 mongo会自动使用其他类型索引 若使用hint进行指定 则会查询不到(因不存在)
循环
for(i=1;i<=10;i++)db.collectionName.insert({x:i})
//使用for循环生成十条数据