mongodb
安装
Raspberry PI
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install mongodb-server
Docker
docker run --name some-mongo -d \
-p 27017:27017 \
-v `pwd`/db:/data/db \
mongo:tag
docker run -d --name some-mongo \
-p 27017:27017 \
-v `pwd`/db:/data/db \
-e MONGO_INITDB_ROOT_USERNAME=mongoadmin \
-e MONGO_INITDB_ROOT_PASSWORD=secret \
mongo
使用
mongodb有三元素:数据库,集合(表),文档(行)
--dbpath 指定数据存放文件点
以下domain替换成表名
insert
db.domain.insert({"name":"zcw","age":22})
find
db.domain.find() db.domain.find({"name":"zcw"}) db.domain.find({"age":{$gt:20}}) gt,te... db.domain.find({$or:[{...},{...}]}) or db.domain.find({"k1":"v1","k2":"v2"}) and db.domain.find({"name":{$in:["a","b","c"]}}) In db.domain.find({"name":{$nin:["a","b","c"]}}) NotIn db.domain.find({$where:function(){return this.age == 10;}}) // $where,返回布尔值,数字0或非0,对象空或非空 .sort({"name",1}) //排序,1升序 .skip(0) //offset .limit(10); //pageSize
update,默认只修改第一条,第一个参数为查找条件,第二个参数为更新的值
db.domain.update({"name":"zcw"},{"name":"zzz"}) //整体更新
- $inc修改器,在原基础上修改值,如果文档中没有此key,则创建;inc是increase的缩写
db.domain.update({"name":"zcw"},{$inc:{"age":10}}) 原来22,会变成32
- $set修改器
db.domain.update({"name":"zcw"},{$set:{"age":10}}) 原来22,变成10
- update第3个参数设置为true,更新数据,没有则新增
- update第4个参数设置为true,批量更新
- $inc修改器,在原基础上修改值,如果文档中没有此key,则创建;inc是increase的缩写
remove,如果不带参数,将删除所有数据,不可恢复
db.domain.remove()
count
db.domain.count({"age":20}) 统计年龄为20的数据条数
distinct,列出指定字段,并去重
db.domain.distinct("age") 列出所有的年龄值,并去重
group
key : 分组的key
initial : 每组都执行的初始化函数,类似于构造函数
$reduce : 两个参数,当前对象,上次操作的累积对象
//////以下是可选条件
condition : 过滤条件
finalize : 每组执行完后调用此方法,类似于析构函数
db.user.group({ ... key:{age:true,xxxx:true}, #多个key写后面即可 FIXME:value值貌似随便填,不一定要true ... initial:{names:[]}, ... $reduce:function(cur,pre){ # $可不写 ... prev.names.push(cur.name); ... } ... });
mapReduce
TODO
explain,性能分析函数
索引
db.domain.ensureIndex({name:1}) //1,升序,-1降序 db.domain.ensureIndex({name,1},{unique:true}) //唯一索引 db.domain.ensureIndex({name:1,age:1}) db.domain.ensureIndex({age:1,name:1}) //组合索引 db.domain.getindexes() //查看索引 db.domain.dropIndexes("name_1") //删除索引
aggregate
TODO