mongodb基础总结

mongo
数据库
admin:root权限级数据库
local:该服务器作为本地单台服务器集合,数据不能复制
config:分片
命名问题

集合
由一组文档组成
命名问题

文档doc(键值对):{“name”:”zx”,”age”:23}
文档有序:{“name”:”zx”,”age”:23}与{“age”:23,name”:”zx”}是不同的文档
文档的键一般是字符串,值可以有多种数据类型
键中
不能含有\0字符
.和$有特别意义
_下划线开头的键内部保留
大小写敏感
同一文档不得存在多个相同键值

数据类型
json:null bool int string [] obj
mongodb扩展: null bool 32int 64int 64float string ObjectId() Date 正则 function(){} binary undefined [] 内嵌文档 MAX(BSON) MIN(BSON)
json与mongo中的数字、日期、…
ObjectId与_id

mongo服务端口27017,http端口28017,确保端口没有被占用
mongo与javascript
mogno默认test数据库 全局变量db mongodb的入口

基本操作command
mongod –dbpath S:\mongodb\db //mongo数据存储路径
mongo // 环境变量,启动操作
help // 内置帮助文档
show dbs/show databases // cat all database
use zxtest // use database zxtest
db.createCollection(“info”,{capped:true,autoIndexId:true,size:6142800,max:1000})// create collection
show collections // cat all collection
db.collection.drop() // 删除集合
db.collection.update // 带括号执行函数,不带括号直接看update源码(api.mongodb.org/js)

插入文档
doc=({name:”zx”,sex:”mase”,age:23,school:”cdu”,home:”xz”})
bson:Binary josn-效率、可遍历、性能
db.info.insert(doc)
insert操作会将数据转换为bson类型,检测_id和长度校检
db.info.insertOne()
db.info.insertMant()

删除文档
db.info.remove(query, justOne)

更新文档db.info.update(query,obj,upsert,multi)
db.info.update({home:”xz”},{$set:{home:”cd”}},{multi:true})
db.info.updateOne({home:”xz”},{$set:{home:”cd”}})
db.info.updateMany({age:{$gt:”20”}},{$set:{“home”:”cd”}})
修改器
$set:用来指定一个键的值,若该键不存在则创建之
$unset: $set的逆操作,若该键不存在则忽视
$inc:增加键的值,只能是整数
数组修改器$psuh/$pop
$ne: not equal
$addToSet
$each
定位操作符 $
upsert:若找到文档则正常更新,否则以这个条件和更新文档为基础创建一个新的文档
save

mongo 不保证数据存储 不支持事务 安全保存数据
db连接池

db.info.deleteOne({name:”zx”})
db.info.deleteOne({})
db.info.deleteMany({})
db.info.deleteMany({name:”zx”})

查找文档db.info.find(query,fields,limit,skip,barchSize,options)
查找器
$in/$nin:在..中
$or:或
$not:非
$mod:取余
$lt/$gt:比较
$exists/null:不存在的
正则表达式
数组:$all/$size/$slice列表头的或列表尾的
嵌套文档:$elemMatch
$where:全能但低效的

.limit:限制查找返回的数目
.skip:跳过前n个文档,跳过的数目不宜过多
.sort:可以设置多个排序规则,数据类型的比较规则 MIN<null<int<string<doc/obj<binary<objectid…

db.info.find({name:”zx”}).pretty()
db.info.find({age:{$gt:20}}).pretty()
db.info.find({name:”lw”,age:{$lt:23}}).pretty()
db.info.find({$or:[{name:”zx”},{home:”cd”}]}).pretty()
db.info.find({$or:[{name:”zx”},{home:”cd”}]},{name:1,by:1}).pretty()
db.info.find({name:{$type:2}}) // find by col’s type
db.info.find({},{name:1,_id:0}).limit(2) // limit count
db.info.find({},{name:1,_id:0}).limit(2).skip(1) // skip front, and show 2
db.info.find({age:{$gt:20}}).sort({age:-1}).pretty() // 1:asc

索引
db.info.ensureIndex(keys,options) // before mongodb 3.0
db.info.createIndex({name:1})
根据需求做索引:
或作怎样的查询?
那些键需要索引?
每个键的索引方向是怎样的?
如何应对扩展?
有没有那种不同的键的排列可以使常用数据更多的保存在内存中?
聚合
count()
distant()
group()
db.info.aggregate([{$group:{_id:name,member_total:{$sum:1}}}])

[[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1],[1,5,10,10,5,1]]

0%