MongoDB 使用
MongoDB:不支持外键/链表
启动MongoDB服务
./mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs --logappend --port=27017 --fork
数据库以及表的操作
查看所有的数据库 :
show dbs 查看所有数据库
通过use关键字切换数据库:
use admin
查看表
show tables查看表
删除集合(表)
db.user.drop()
删除数据库
先切换到要删除的数据库
use testdb
删除
db.dropdatabase()
新增数据
_id为object类型的 以划线开头的都是系统域(表)
MongooDB是json格式的
db.表名.insert({id:1,name:‘zf’,age:18})
db.user.save({id:2,name:'list,age:33})
查询表数据
db.user.find()
更改数据
更改不存在的字段是会新增这个字段
db.表名.update(
{id:1},
{KaTeX parse error: Expected 'EOF', got '}' at position 13: set:{age:25}}̲, true …se修改后字段会被覆盖
)
删除数据
//justone 如果为true或1,则之删除一个文档 如果是false则删除多个文档
db.user.remove({age:22},true)//删除一条数据
db.user.remove()//不加参数则全部删除
查询数据
db.user.find()查询全部
db.user.find({},{id:1,name:1})
db.user.find().count()查询个数
db.user.find({id:1}).pretty()美化查询
db.user.find({age:{KaTeX parse error: Expected 'EOF', got '}' at position 7: lte:21}̲})查询年龄比21小或者是21…lte:21},name:{KaTeX parse error: Expected 'EOF', got '}' at position 6: gte:2}̲})查询年龄比21大或者是21…or:[{id:21},{id:1}]})查询id=21与是id=1的数据
db.user.find().limit(2).skip(1)从第下标为一的开始截取2条数据
查询条件
$lt < (less than )
$lte <= (less than or equal to )
$gt > (greater than )
$gte >= (greater than or equal to)
$ne != (not equal to)不等于 {'age': {'$ne': 20}}
KaTeX parse error: Expected '}', got 'EOF' at end of input: …在范围内 {'age': {'in’: [20, 23]}} 注意用list
KaTeX parse error: Expected '}', got 'EOF' at end of input: …不在范围内{'age': {'nin’: [20, 23]}} 注意用list。这个方法可以计算某个值既不等于x也不等于y
$regex (正则匹配) db.collection.find({'name': {'$regex': '^M.*'}}) 匹配以M开头的名字
$exists 属性是否存在 {'name': {'$exists': True}} 查找name属性存在
$type 类型判断 {'age': {'$type': 'int'}} age的类型为int
$text 文本查询 {'$text': {'$search': 'Mike'}} text类型的属性中包含Mike字符串
$or 查找多种条件 ({'$or':[{'name':'chen'},{'name':'wang'}]})
索引
db.user.getindexes({})查看索引
db.user.reopindex()删除索引
db.user.createindex({'age':1,id':-1})创建联合索引
执行计划
查询分析可以确保我们建议的索引是否有效,是查询语句效率分析的重要工具
查看执行计划
db.user.find().explain()
查询方式
IDHACK 针对_id进行查询
SHARD_MERGE 合并分片结构
FETCH 根据索引去检索文档
IXSCAN 索引扫描
COLLSCAN 全表扫描比较慢