zoukankan      html  css  js  c++  java
  • Mongodb安装和启动

    一.安装(Linux平台)
    1.下载MongoDB安装包
    MongoDB官网:http://www.mongodb.org 下载相应的版本
    2.解压压缩包
    tar zxvf mongodb-linux-i686-1.8.0.tgz
    最好给解压的文件夹改个名字,方便操作
    mv mongodb-linux-i686-1.8.0 mongodb
    3.安装准备
    将mongodb移动到/usr/local/mongdb文件夹
    mv mongodb /usr/local/mongodb
    创建数据库文件夹(默认的数据库文件的位置是/data/db,启动时会自动创建)
    mkdir /usr/local/mongodb/data
    提示:mongoDB没有具体的安装过程,解压文件包后,可以直接使用,非常高效和方便
    4.开机自启动
    将mongodb启动项目加入rc.local保证mongodb在服务器开机时启动
    echo"/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data" >> /etc/rc.local
    5.启动mongodb
    运行mongod命令
    /usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data --fork --logpath=/usr/local/mongodb/dblogs
    --dbpath执行数据库存放路径(默认是/data/db)
    --fork是以Daemon(进程)方式运行,
    注意:如果指定--fork参数,必须指定--logpaht日志文件路径

    注:启动命令常用参数选项说明
    --dbpath 指定数据库的目录
    --port 指定数据库的端口,默认是27017
    --bind_ip 绑定IP
    --directoryperdb为每个db创建一个独立子目录
    --logpath指定日志存放目录
    --logappend指定日志生成方式(追加/覆盖)
    --pidfilepath 指定进程文件路径,如果不指定,将不产生进程文件
    --keyFile 集群模式的关键标识
    --journal 启用日志
    --nssize 指定.ns 文件的大小,单位MB,默认是16M,最大是2GB
    --maxConns 最大的并发连接数
    --notablescan 不允许进行表扫描
    --noprealloc 关闭数据文件的预分配功能
    --fork 以后台Daemon形式运行服务
    更多的参数选项利用mongod --help 进行查看

    6.进入客户端操作
    /usr/local/mongodb/bin/mongo (mongo命令)
    MongoDB的安装也就完成了,就是这么简单。(默认进入的是test库)

    7.退出shell控制台
    Ctrl+c 或exit 回车

    8.关闭服务
    pkill mongod 杀死进程 或killall mongod

    二.MongoDB体系
    关系型数据库:
    MySQL数据库(database)、表(table)、记录(rows) 三个层次概念组
    非关系型数据库:
    MongoDB 数据库(database)、集合(collection)、文档对象(document)三个层次概念组

    三.常用命令
    控制台中的基本操作命令
    如果想查看当前连接在哪个数据库下面,可以直接输入db
    查看用户列表db.system.users.find();
    查看所有用户show users;
    查看所有数据库show dbs;
    查看所有集合show collections;
    删除当前的数据库db.dropDatabase();
    删除collection db.集合名.drop();
    想知道mongodb支持哪些命令 ,可以直接输入help;
    想知道当前数据库支持哪些方法:db.help();
    想知道当前集合支持哪些方法:db.user.help(); user为集合名
    更多命令可以用帮助命令获得

    ######################################################################

    一.应用Mongodb (增删改查)
    Capped Collection(固定集合)
    GridFS(大文件上传下载)

    1.添加 要记着_id这个主键,有大用处
    insert与save都是添加,save是_id的字段相同的则更新,不相同都添加,而insert主键(_id)则添加失败
    1)Insert 方法
    db.c1.insert({name:"user100",age:30});
    db.c1.insert({name:"user1"});
    db.c1.insert({name:"user2"});
    db.c1.insert({name:"user3"});
    db.c1.find(); #查看

    2).Save 方法
    db.c1.save({name:"user4"});
    db.c1.save({name:"user4"});

    例:
    db.c1.remove();
    db.c1.insert({name:"user1",post:{tit:1,cnt:11111}}); # 添加json
    db.c1.find();

    db.c1.insert({name:"user2",post:[1,2,3,4,5]}); # 添加数组
    db.c1.find();

    2.删除
    1).remove
    例:
    db.c1.remove(); # 这个就等同于 db.c1.remove({});
    db.c1.find();

    有条件的删除
    db.c1.insert({name:"user1"});
    db.c1.insert({name:"user2"});
    db.c1.insert({name:"user3"});
    db.c1.find();
    db.c1.remove({name:"user1"}); # 删除name为user1的删除

    3.查询
    例:循环来添加数据(和js写法一致)
    for(i=1;i<=10i++){
    db.c1.insert({name:"user"+i});
    }
    db.c1.find();

    //带条件的查询
    db.c1.find({name:"user5"});

    //只选择其中的几列
    db.c1.find({name:"user5"},{name:1});
    //不想要_id
    db.c1.find({name:"user5"},{name:1,_id:0});
    //总结:要的字段为1 不要的为0

    --条件表达式
    1). < <= > >=
    for(i=1;i<=10i++){
    db.c1.insert({name:"user"+i,age:i});
    }
    db.c1.find();
    例:
    //年龄大于5的
    db.c1.find({age:{$gt:5}});

    //年龄小于5的
    db.c1.find({age:{$lt:5}});

    //小于等于5的
    db.c1.find({age:{$lte:5}});

    //大于等于5的
    db.c1.find({age:{$gt:5}});

    //等于
    db.c1.find({age:5});

    //不等于5的
    db.c1.find({age:{$ne:5}});


    //统计
    db.c1.find().count()或 db.c1.count();

    //排序 负数:升序 正数:降序 以年龄来排序的
    db.c1.find().sort({age:-1});

    //取多少个 取几个 这里取3个
    db.c1.find().limit(3);

    //跳过多少个 跳过第5个,从第6个开始取5个
    db.c1.find().skip(5).limit(5);

    //从第8个开始取2个,以年龄降序排列
    db.c1.find().sort({age:-1}).skip(7).limit(2);

    //count里面有两个值,0和1 0:不看前面的条件,1:依前面的条件
    db.c1.find().sort({age:-1}).skip(7).limit(2).count(0);
    db.c1.find().sort({age:-1}).skip(7).limit(2).count(1);

    2). $all 主要针对数组操作的
    db.c2.insert({name:"user1",post:[1,2,3,4,5]);
    db.c2.find();

    //post中包含1,2,3元素的,有1个没有的,返回假,包含则显示
    db.c2.find({post:{$all:[1,2,3]}});

    3).$exists 判断一个字段是否存在
    //有没有包含age字段的
    db.c2.find({age:{$exists:1}});

    4).$mod 取余
    db.c1.find();
    //与2取余得1的 类似 n%2=1的
    db.c1.find({age:{$mod:[2,1]}});

    5).$in 包含 包含的条件用数组格式
    //年龄包含1,3,5的查询出来
    db.c1.find({age:{$in:[1,3,5]}});

    6).$nin 除了
    db.c1.find({age:{$nin:[1,3,5]}});

    7).$nor
    8).$or

    //查询名字是user2且年龄是2的人
    db.c1.find({name:"user2",age:2});

    //查询名字是user2或年龄是3的人
    db.c1.find({$or:[{name:"user2"},{age:3}]});

    //与$or相反
    db.c1.find({$nor:[{name:"user2"},{age:3}]});

    9).$size 查询数组长度
    db.c2.insert({name:"user1",post:[1,2,3,4,5]);
    db.c2.insert({name:"user2",post:[6,7,8,9]);
    db.c2.insert({name:"user3",post:[10,11,12]);
    db.c2.find();
    例:
    //查询字段值为数组中大小是3个的查询出来
    db.c2.find({post:{$size:3}});

    9).正则表达式
    db.c1.find({name:"user"});
    //正则匹配
    db.c1.find({name:/user/i});
    --注:
    i:忽略大小写
    m:超始符^,结束符$对于每一个新行都起作用
    x:忽略空白字符
    s:这个选项从1.9版本后才支持,加上它就可以让"."表示所有字符了,包括换行符.
    例:
    /a.*b/不匹配"apple banana",但是/a.*b/s可以

    10).distinct 去重
    db.c1.distinct("name");

    11).分页查询
    //跳过前10条记录
    db.c1.find().skip(10);
    //第页返回8条记录
    db.c1.find().limit(8);
    //跳过前20条记录,并每页返回10条记录
    db.c1.find().skip(20).limit(10);
    db.c1.find({},{},10,20); 和上面一样的功能 条件,字段:1,条数,跳过数

    12).$elemMatch 元素匹配
    db.c3.insert({name:"user1",post:[{tit:1},{tit:2},{tit:3}]});
    db.c3.insert({name:"user1",post:[{tit:"aa"},{tit:"bb"},{tit:"cc"}]});
    db.c3.find();
    //查找post中tit为2的
    db.c3.find({"post.tit":2});
    db.c3.find({post:{$elemMatch:{tit:2}}});
    db.c3.find({post:{$elemMatch:{tit:"cc"}}});

    13).cursors游标
    var x=db.c1.find();
    x.hasNext();
    x.next()

    14) NULL查询
    db.c4.insert({name:"user1"});
    db.c4.insert({name:"user2",age:null});
    db.c4.insert({name:"user3",age:28});

    db.c4.find({age:{$exists:1,$in:[null]}}); 或
    db.c4.find({age:{$type:10}});

    //不包含有age字段的
    db.c4.find({age:{$exists:0}});

    15). $slice 针对数组
    db.c3.insert({name:"user1",post:[{tit:1},{tit:2},{tit:3}]});
    db.c3.insert({name:"user1",post:[{tit:"aa"},{tit:"bb"},{tit:"cc"}]});
    db.c3.find();

    //第一个贴子
    db.c3.find({name:"user1"},{post:{$slice:1}});

    //前2个贴子
    db.c3.find({name:"user1"},{post:{$slice:2}});

    //前3个贴子
    db.c3.find({name:"user1"},{post:{$slice:3}});

    //后1个贴子
    db.c3.find({name:"user1"},{post:{$slice:-1}});

    //取多少个 跳过第1个从到第2个取2个
    db.c3.find({name:"user1"},{post:{$slice:[1,2]}});

    #################################################

    4.修改,更新

    1).语法 update
    db.collection.update(condition,objnew,upsert,multi)
    参数说明:
    condition: 用于设置查询条件的对象
    objnew: 用于设置更新内容的对象
    upsert: 如果记录已经存在,更新它,否则新增一个记录 参数[0或1] 一般设置为:0
    multi: 如果有多个符合条件的记录,全部更新 参数[0或1] 一般设置为:1
    注:默认情况下,只会更新第一个符合条件的记录

    db.c4.insert({name:"user1"});
    db.c4.insert({name:"user2",age:null});
    db.c4.insert({name:"user3",age:28});

    例:
    db.c4.update({name:"user2"},{age:"nan"},0,1);

    a).$set
    db.c1.insert({name:"user1"});
    db.c1.insert({name:"user1"});
    db.c1.insert({name:"user1"});
    db.c1.insert({name:"user1"});
    例:
    db.c1.update({name:"user1"},{$set:{name:"user111"}},0,1);
    //也可以添加字段
    db.c1.update({name:"user111"},{$set:{age:10}},0,1);

    b).$inc 递增递减
    db.c5.insert({name:"user1",age:10});
    db.c5.insert({name:"user2",age:10,score:1});
    db.c5.insert({name:"user3",age:10,score:22});
    db.c5.insert({name:"user4",age:10,score:123});

    //给所有的人加10
    //注:有这个字段则修改递增,字段不存在,则添加这个字段并赋上这个值
    db.c5.update({},{$inc:{score:10}},0,1);

    //减10
    db.c5.update({name:"user4"},{$inc:{score:-10}},0,1);

    c). $unset 删除字段 0与1 0为假 1为真
    //删除所有积分字段
    db.c5.update({},{$unset:{score:1}},0,1);

    d). $push 与数组有关系的
    db.c5.insert(name:"user1",arr:[1,2,3]);

    //向arr最后压入一个值
    db.c5.update({name:"user1"},{$push:{arr:4}},0,1);

    d). $pop
    //弹出去最后一个值
    db.c5.update({name:"user1"},{$pop:{arr:1}},0,1);

    //一次压入多个值
    db.c5.update({name:"user1"},{$pushAll:{arr:[4,5,6]}},0,1);

    e).$addToSet 压入,存在压入失败
    db.c5.update({name:"user1"},{$addToSet:{arr:1}},0,1);

    f). $each
    //压入多个唯一值
    db.c5.update({name:"user1"},{$addToSet:{arr:$each:[9,10]}},0,1);

    g). $pull 针对数组
    //删除arr中1的值
    $db.c5.update({name:"user1"},{$pull:{arr:1}});

    h). $pullAll 一次性删除多个值
    $db.c5.update({name:"user1"},{$pullAll:{arr:[1,2,3]}});

    i). $rename 修改字段的名字
    $db.c5.update({name:"user1"},{$rename:{arr:"post"}});
    $db.c5.find();

    j). 特殊操作符:$
    db.c5.insert({name:"user1"});
    db.c5.update({name:"user1"},{$push:{arr:{tit:"linux"}}});
    db.c5.update({name:"user1"},{$push:{arr:{tit:"php"}}});

    //把tit中的php中插入cnt字段为this is php
    db.c5.update({"arr.tit":"php"},{$set:{"arr.$.cnt":"this is php"}});

    #######################################################################

    //删除集合
    db.c1.drop();

    //查看集合
    show tables;

    //删除数据库
    db.dropDatabase();

    //创建一个集合 人为显示的创建的一个集合
    db.createCollection("c1");
    show tables;
    db.c1.find();
    db.c1.drop();

    //查看状态
    db.c1.stats();

    ######################################################33

    Capped Collection固定集合
    功能特点:
    可以插入及更新,但更新不能超出collection的大小,否则更新失败,不允许删除,但是可以调用drop()删除集合中的所有行,但是drop()后需要显式地重建集合.在32位机上一个固定集合最大值约482.5M,64位机上受系统文件大小的限制.

    好处:
    1.插入速度极快.
    2.按照插入顺序的查询输出速度极快
    3.能够在插入最新数据时,淘汰最早的数据

    用途:
    1.存储日志信息
    2.缓存一些少量的文档

    1.创建固定集合
    //大小为10K,可以建5个json对象
    db.createCollection("c2",{capped:true,size:10000,max:5});
    //查看状态
    db.c2.stats();

    db.c2.insert(name:"user1");
    db.c2.insert(name:"user2");
    db.c2.insert(name:"user3");
    db.c2.insert(name:"user4");
    db.c2.insert(name:"user5");

    2.转换集合
    把普通集合转换成固定集合
    //把c1普通集合转换成固定集合大小为10M,存储3个json对象
    db.runCommand({convertTocapped:"c1",size:100000000,max:3});

    ####################################################################

    GridFS文件系统
    GridFS是一种在Mongodb中存储大二进制文件的机制.使用GridFS原因有以下几种:
    1).存储巨大的文件,比如视频,高清图片等.
    2).利用GridFS可以简化需求.
    3).GridFS会直接利用已经建立的复制或分片机制,故障恢复和扩展都很容
    4).GridFS可以避免用户上传内容的文件系统出现问题
    5).GridFS不产生磁盘碎片

    GridFS使用两个表来存储数据:
    GridFS存储将包括命名空间:fs.files和fs.chunks 默认前缀为fs

    使用:
    进入 /usr/local/mongodb/bin下
    ./mongofiles -h 看看支持的参数
    ./mongofiles list

    //上传一个文件: put
    ./mongofiles put abc.tar.gz
    这里进入mongod中就是看了fs.files和fs.chunks
    db.fs.files.find();

    ./mongofiles list

    //下载 get
    ./mongofiles get abc.tar.gz

    //删除
    ./mongofiles delete abc.tar.gz
    ./mongofiles list


    //linux的命令
    查看md5值:md5sum abc.tar.gz

    ##################################################################

    性能篇

    1.索引管理
    2.性能优化
    3.性能监控

    --- 索引
    1.建立索引(普通索引) ensureIndex() 1:升序,-1:降序
    后台建立索引只需要指定 background:true就可以了

    for(i=1;i<=10;i++){
    db.c1.insert({name:"user"+i,age:i});
    }
    db.c1.find();

    //解析查询语句 explain()
    db.c1.find({name:"user5"}).explain();

    //增加索引
    db.c1.ensureIndex({name:1});
    //在后台添加索引
    db.c1.ensureIndex({name:1},{background:true});

    //查看索引清单
    db.c1.getIndexKeys();

    db.c1.find({name:"user5"}).explain();

    2.唯一索引
    只需要指定unique:true就可以了

    //年龄建立唯一索引
    db.c1.ensureIndex({age:1},{unique:true});

    3.删除索引
    //删除age字段的索引
    db.c1.dropIndex({age:1});

    //删除c1集合的全部索引,除_id以外
    db.c1.dropIndexes();

    --- 性能优化

    1.profile 优化器
    是一种慢查询日志功能,可以作为我们优化数据库的依据

    开启Profiling功能
    级别:
    0 不开启
    1 记录慢命令(默认为>100ms)
    a.通过启动时添加--slowms启动参数配置
    b.db.setProfilingLevel时加上第二个参数

    2 记录所有命令

    有两种 方式可以控制Profiling的开关和级别
    启动MongoDB时加上 --profile=级别即可 [0,1,2]
    在客户端调用db.setProfilingLevel(级别)命令来实时配置
    Profiler信息保存在system.profile中,我们可以通过db.getProfilingLevel()命令来获取当前的Profile级别

    //查看
    db.getProfilingLevel();

    //开启
    db.setProfilingLevel(1);

    //超过1秒的记录下来 不一定成功,最好在启动时加参数修改
    db.setProfilingLevel(1,1000);

    //启动时开启和修改慢查询
    ./mongod --profile=1 --slowms=1000

    ---- 性能临控

    1. mongosniff //记录通讯记录

    //查看网络通讯
    mongosniff --source net lo


    2. mongostat

    ./mongostat

    #########################################################

    ---管理篇
    1.数据导出,数据导入
    2.数据备份,数据恢复
    3.用户安全与认证

    --- 数据导出 ./mongoexport
    参数说明:
    -d 指明使用的库
    -c 指明要导出的表
    -o 指明要导出的文件名 c1.dat等
    默认导出方工使用的是json的样式

    --导出csv格式的文件
    ./mongoexport -d test -c c1 --csv -f name,age -o c1_csv.dat
    参数说明:
    --csv 指明要导出的csv格式
    -f 指明需要财出的哪些列

    ./mongoexport -h 查看帮助

    // -d 数据库 -c 集合名 -o 导出数据路径和名称
    ./mongoexport -d test -c c1 -o /tmp/c1.out

    进入到mongo中
    db.c1.remove(); //删除c1集合中的数据
    db.c1.find();
    exit

    --- 数据导入 ./mongoimport

    // -d 数据库 -c 集合名 文件
    ./mongoimport -d test -c c1 /tmp/c1.out

    --导入csv格式的文件
    ./mongoimport -d test -c c1 --type csv --headerline --file c1_csv.dat
    参数说明:
    --type 指明要导入的文件格式
    --headerline 指明不导入第一行,因为第一行是列名
    --file 指明要导入的文件路径

    ----- 数据备份,数据恢复
    数据备份: mongodump
    数据恢复: mongorestore

    -- 数据备份 mongodump
    -d 指明数据库名
    -o 指明备份的文件路径
    -c 可以指明备份的集合

    //备份test数据库
    ./mongodump -d test -o /tmp/test.bak

    -- 数据恢复 mongorestore
    如需验证可先删除test库,或指明--drop参数,就可以在恢复的时候先删除然后再向里插入数据

    ./mongorestore -d test /tmp/test.bak

    ----- 用户安全与认证 (用户授权)

    1.先关闭mongod
    pkill mongod

    2.在启动mongod 加入 --auth
    /usr/local/mongodb/bin/mongod --auth --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/dblogs --fork

    3../mongo中
    use admin中
    //用户名:root 密码:123
    db.addUser("root","123"); -- 超级管理员
    这样设置后就算成了

    -----
    //验证必须进入admin数据库验证后在use test去操作
    ./mongo -uroot -p123 localhost:27017/admin
    这个用户登陆进去后,可以看任务数据,它是超级管理员


    //在test数据库也添加用户名和密码
    use test
    db.addUser("user1","123"); -- 普通管理员 只能看本数据库

    //可以用这个来测试验证
    db.auth("user1","123");

    //查看用户
    db.system.users.find();

    ####################################################################

    架构篇
    1.主从复制
    2.副本集

    --- 主从复制 Mongodb的主从集群分为两种:
    Master-Slave 复制(主从)
    Replica Sets 复制(副本集)


    Master-Slave 复制(主从)
    只需要在某一个服务启动时加上--master参数,而另一个服务加上--slave与--source参数,即可实现同步.
    注:最新版本的已经不推荐使用这种方法了

    例: 暂不设置验证了
    A服务器
    pkill mongod
    /usr/local/mongodb/bin/mongod --master --dbpath=/usr/local/mongodb/data1 --logpath=/usr/local/mongodb/dblog1 --fork --port 20001

    ./mongo --port 20001
    db.c1.insert({name:"user1"});
    db.c1.find();


    B服务器 ****只能查询 不可添加和修改
    /usr/local/mongodb/bin/mongod --slave --source 127.0.0.1:20001 --dbpath=/usr/local/mongodb/data2 --logpath=/usr/local/mongodb/dblog2 --fork --port 20002

    ./mongo --port 20002
    db.c1.find();

    ** 备份可以在从服务器上进行
    ./mongodump --port 20002 -d test 这样也就可以在mongodb目录下生成一个dump和对应的库名一致的目录(test)


    Replica Sets 复制(副本集)
    mkdir data1
    mkdir data2
    mkdir log
    touch log/log1
    touch log/log2
    mkdir key
    touch key/key1
    touch key/key2
    echo "123456" > key/key1
    echo "123456" > key/key2
    //注:一定要设置成600
    chmod 600 key/key1
    chmod 600 key/key2

    --replSet 副本集名(自定义)

    A服务器
    /usr/local/mongodb/bin/mongod --replSet rs1 --keyFile=/usr/local/mongodb/key/key1 --port 20001 --dbpath=/usr/local/mongodb/data/data1 --logpath=/usr/local/mongodb/log/log1 --fork

    /usr/local/mongodb/bin/mongod --replSet rs1 --keyFile=/usr/local/mongodb/key/key2 --port 20002 --dbpath=/usr/local/mongodb/data/data2 --logpath=/usr/local/mongodb/log/log2 --fork

    ./mongo --port 20001
    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();

    命令,就可以查看了 ,从服务器的终端提示为
    SECONDARY>
    主服务器终端提示为
    PRIMARY>

    //查看副本集的状态
    rs.status();


    ##############################################################

    PHP支持mongodb扩展
    1.下载
    http://pecl.php.net/package/mongo

    2.解压
    tar zxf mongo-1.4.5.tgz
    cd mongo-1.4.5
    /usr/local/php/bin/phpize
    ./configure --with-php-config=/usr/local/php/bin/php-config --enable-mongo
    make && make install

    vi php.ini
    添加
    extension=mongo.so
    重启apache就生效了 就可以用php来增删改查mongodb数据库了


    ----启动Mongo服务器
    pkill mongod
    /usr/local/mongodb/bin/mongod --auth --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/dblog --fork
    ./mongo
    use admin
    db.addUser("root","123");
    exit
    ./mongo -uroot -p123 localhost:27017/admin
    use test
    db.addUser("user1","123");
    db.system.users.find(); 到这里服务器端完成了

    ---php文件
    <?php
    $conn = new Mongo();
    #连接localhost:27017
    $conn = new Mongo('localhost:27017');
    #连接localhost:27017 有用户名密码并指定数据库blog
    $conn = new Mongo("mongodb://${username}:${password}@localhost:27017/blog");
    ?>
    例:
    <?php
    $conn = new Mongo("mongodb://user1:123@locahost:27017/test");
    $db = $conn->test; //取名称为 "test" 的数据库
    ?>

    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    1.连接

    1 <?php
    2 $conn = new Mongo("mongodb://user1:123@locahost:27017/test");
    3 //$conn->connected;
    4 $db   = $conn->test; # 取名称为 "test" 的数据库
    5 ?>

    2.查看

     1 <?php
     2 include './conn.php';
     3 $c1 = $db->c1; //到c1集合
     4 //db.c1.find({name:"user1"});
     5 //{name:"user1"} == array("name"=>"user1");
     6 //[1,2] == array(1,2);
     7 
     8 /*
     9 $arr = array(); //类似{}全取出来
    10 $res = $c1->find($arr);
    11 foreach($res as $v){
    12     $oid = $v['_id'];
    13     echo '<pre>';
    14     print_r($v);
    15 }
    16 */
    17 
    18 #$arr = array("name"=>"user1");
    19 $arr = array();
    20 $res = $c1->find($arr);
    21 foreach($res as $v){
    22     $oid = $v['_id'];
    23     echo "<a href='user.php?oid'=$oid>".$v['name']."</a><hr />";
    24     #echo '<pre>';
    25     #print_r($v);
    26 }
    27 ?>

    3.详细

     1 <?php
     2 include './conn.php';
     3 $c1 = $db->c1;
     4 
     5 $oid = new MongoId($_GET['oid']);
     6 
     7 $arr = array("_id"=>$oid);
     8 $res = $c1->find($arr);
     9 foreach($res as $v){
    10     echo '<pre>';
    11     print_r($v);
    12 }
    13 ?>

    4.添加

     1 <?php
     2 include './conn.php';
     3 $c1 = $db->c1;
     4 //db.c1.insert({name:"user2",age:30,sex:"nan"});
     5 $arr = array("name"=>"user2","age"=>30,"sex"=>"nan");
     6 if($c1->insert($arr)){
     7     echo "<script>
     8         location.href='find.php';
     9     </script>";
    10 }else{
    11     echo '失败!';
    12 }
    13 ?>

    5.修改

     1 <?php
     2 include './conn.php';
     3 $c1 = $db->c1;
     4 //db.c1.update({name:"user1"},{$set:{age:300}});
     5 
     6 $arr1 = array('name'=>'user1');
     7 $arr2 = array('$set'=>array('age'=>30));
     8 $opts = array('upsert'=>0,'multiple'=>1)
     9 
    10 if($c1->update($arr1,$arr2,$opts)){
    11     echo "<script>
    12         location.href='find.php';
    13     </script>";    
    14 }else{
    15     echo '更改失败!!';
    16 }
    17 ?>

    6.删除

     1 <?php
     2 include './conn.php';
     3 $c1 = $db->c1;
     4 //db.c1.remove({name:"user2"});
     5 
     6 $arr = array("name"=>"user2");
     7 if($c1->remove($arr)){
     8     echo "<script>
     9         location.href='find.php';
    10     </script>";    
    11 }else{
    12     echo "删除失败!!";
    13 }
    14 ?>
  • 相关阅读:
    docker安装与使用路径
    python3.7简单的爬虫
    ubuntu19.04下查看软件安装目录和详细信息
    Javascript检查对象是否存在某个属性
    bootstrap源码和测试
    python学习笔记之pdb调试
    pydensecrf安装报错1、UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb6 in position 29: invalid start byte2、 LINK : fatal error LNK1158: 无法运行“rc.exe” error: command 'D:\software\vs2015\VC\BIN
    python学习日记:np.newaxis
    好用的网址集锦
    网络配置ipconfig /release、ipconfig /renew
  • 原文地址:https://www.cnblogs.com/ahwu/p/3475634.html
Copyright © 2011-2022 走看看