zoukankan      html  css  js  c++  java
  • mongoDB基本操作

    /*
                @author:luowen
                @time:2013-08-01
            [mongoDB]    
    
                1.mongoDB安装
                    下载mongodb-linux-i686-2.2.5.tgz
                    tar -zxvf mongodb-linux-i686-2.2.5.tgz
                    将其拷贝到/usr/local/mongodb
                    在mongodb目录下创建data log 目录
                    进入 bin ./mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs --fork 启动服务
                    //可以将这个语句添加到/etc/init/local文件中每次自动启动
                    ./mongo 进入数据库使用
    
                2.一些基本的操作    
                    db.c1.find().sort({age:1}).skip(2).limit(3).count(1);
    
                    $all :查询包含的
                        {name:'luowen',post:[1,23,4,5]}
                    db.c1.find({post:{$all:[1,2]}}) --> true;
                    db.c1.find({post:{$all:[1,2,4]}}) --> false;
    
                    $exists 测试一个字段是否存在 xx.xx.find({$exists:[post]})
    
                    $mod 取余 xx.xx.find({id:{$mod:[1,2,]}})
    
                    $ne 不等于 xx.xx.find({id:{$ne:[1,2,3,2]}})
    
                    $in xx.xx.find({id:{$in:[12,12,2,2]}});
    
                    $nin xx.xx.find({id:{$nin:[1,2,3,4,5,5]}})
    
                    $or 名字是user1或者age是1的记过 xx.xx.find({$or:[{name:'user1',age:1}]})
    
                    $nor 名字不是user1 age不是1的 xx.xx.find({$nor:[{name:'user1',age:1}])
    
                    $size 去除post的值是3的数据 xx.xx.insert({post:[1,2,3]}) xx.xx.find({post:{$size:3}})
    
                    $skip $limit 实现分页
    
                    $elemMatch 元素匹配 匹配数组arr中id为3的值
                        xx.xx.find({arr:{$elemMathc:{id:3}}}) 
                    游标 x = xx.xx.find() x.hasNext() 判断 x.next() 取出内容
    
                    $slice xx.xx.find({name:'user'},{post:{$slice:3}}) 去出前三篇帖子
    
                    [update]
                    
                    $set 保存原有的格式,然后在修改 xx.xx.update({name:'user1'},{$set:{age:30}}) 给user1的用户添加了一个字段age
    
                    $inc 自增     
                    $unset删除不需要的字段xx.xx.update({},{$unset:{score:1}},0,1);删除score字段
                    $push 压入数据到collections中 xx.xx.update({name:'user1'},{$push:{arr:8}},0,1);
                    $pushAll 同事压入多个数据 xx.xx.update({name:'user1'},{$pushAll:{arr:[2,32,12,21,1212]}});同时压入多个数据
    
                    $addToSet 当表中存在时,就压入,如有重复就不压入 xx.xx.update({name:'user1'},{$addToSet:{arr:12}}) 如果arr中存在12,则不压入,不存在则压入
    
                    $pop 删除数组中最后一个元素 xx.xx.update({name:'user1'},{$pop:{$arr:1}});
    
                    $pull 只能操作数组 xx.xx.update({name:'user1'},{$pull:{arr:4}})删除数组arr中值为4的键
                    $pullAll 删除多个xx.xx.update({name:'user1'},{$pullAll:{arr:[4,5]}})同事删除4和5值
    
                    $rename更改字段名字xx.xx.update({name:'user1'},{$rename:{arr:'post'}})把arr字段更改为post
    
                    $bit 位运算
    
                    特殊操作符号 $
                        {'id':'213','arr':[{'title':'linux'},{'title':'java'},{'title':'php'}]}在arr数组中的title为linux的结果集中添加一个cont字段
                    xx.xx.update({'arr.title':'linux'},{'arr.$.cnt':'linux is very good!'});
    
                    res
                    {'id':'213','arr':[{'title':'linux','cnt':'linux is very good'},{'title':'java'},{'title':'php'}]}
    
                    db.dropDatabase() //删除数据库
                    db.collections.drop //删除集合
                    db.createCollection('c1') //穿件一个集合
                    db.createCollection('c2',{capped:true,size:1000,max:5}) //创建一个固定结合只能放5个json多了就把前面的推出去
                    db.runCommand({convertToCapped:'c1',size:1000,max:4}); //将c1转化成一个固定集合
    
                    GridFS一个大文件系统
    
                    ./mongofiles put 文件名
                    ./mongofiles get 文件名
                    ./mongofiles delete 文件名
                    ./mongofiles list 列出上传文件
                    db.fs.files.find(); //查找信息
                    db.fs.files.remove(); //移除信息
                    db.fs.chunks.find() //查看源文件
                    db.fs.chunks.remove() //删除源文件
    
                [性能篇]
                    查看一个语句的影响行数
                        db.c1.find({name:'user'}).explain();
                    增加一个索引
                        db.c1.ensureIndex({name:true},{background:true}) //在后台建立name的索引
                    查看索引
                        db.c1.getIndexes();
                    查看索引键
                        db.c1.getIndexKeys();
                    添加一个唯一索引
                        db.c1.ensureIndex({age:1},{unique:1}); //给age创建了一个唯一索引
                    删除索引
                        db.c1.dropIndex({age:1}) //删除age的索引
                        db.c1.dropIndexes();//删除所有的索引,除id一歪
                [慢查询日志]
    
                    启动的时候 添加 --profile=[0,1,2]
                        0:不记录
                        1:记录慢查询日志
                        2:记录所有的日志
                                添加 --slowms
                        ./mongod --dapath=/usr/local/mongodb/data/ --logpath=/usr/local/mongodb/log/logs.log --profile=1 --slowms=300 --fork
                    在启动后
                     > db.getProfilingLevel();
                     > db.setProfilingLevel(1) //设置开启慢查询
                     xx.xx.find({},{field1:1,field2:1,field3:1}).sort({field:-1}).limit(8);//查询出结果,返回字段,排序,限制条数
    
                [性能监控]
                    ./mongosniff --source
                    ./mongostat
    
                [管理篇]
                    数据导入 mangoexport -d dabataseName -c collectionName -o /home/bakName.bak
                    数据导出 mangoimport -d databasesName -c collections /home/bakName.bak
    
                    备份 mongodump -d databaseName
                    恢复 mongorestore -d databaseName /备份路径文件 
    
                [用户授权]
                    mongod --auth 添加验证选项
                    user admin //超级管理员
                    db.addUser('root','luowen');//超级管理员密码
                    每个数据库一个管理员,只能在这个数据库里面转
    
                [架构篇]
                    主从复制
                        Master-Slave 复制(主从)
                        Replica Sets 复制(副本集)
    
                        1.简单的主从
                            ./mongod --master --dbpath=/data1 
                            ./mongod --slave --source 主服务器地址ip--dbpath=/data2
                        2.Replica Sets(副本集复制)
                             ./mongod --replSet rs1 --keyFile=/usr/local/mongodb/key/key1 --dbpath=path/data1
                             ./mongod --replSet rs1 --keyFile=/usr/local/mongodb/key/key2 --dbpath=path/data2 //两个主服务器启动了,在同一个组中rs1中
                             //配置会议室(随便登入一台服务器)
                             config_rs1={_id:'rs1',members:[{_id:0,host:"localhost:20001",priority:1},{_id:1,host:"localhost:20002",priority:2}]}
                             //初始化清单
                             rs.initiate(config_rs1);
                             rs.slaveOk();//设置从服务器有读的权限
  • 相关阅读:
    内存对齐规则
    ATL窗口
    ATL的GUI程序设计(4)
    ATL的GUI程序设计(4)
    ATL的GUI程序设计(3)
    ATL的GUI程序设计(3)
    VMware Workstation 9.0 安装苹果Mac OS X10.9系统
    高级UIKit-03(NSFileManager、NSFileHandle)
    高级UIKit-02(文件操作)
    高级UIKit-01(总结基础UIKit)
  • 原文地址:https://www.cnblogs.com/luowen/p/3234937.html
Copyright © 2011-2022 走看看