woodenwang 发表于 2018-7-18 11:01

[转载]php与mongodb在我的撮合下,不得不说的秘密

本帖最后由 wushaominkk 于 2018-7-18 16:42 编辑

    此文谨献给正在枯燥无味的“程序猿”“攻城狮”。
    这个故事发生在windows省apache市,我们的主人公是php5.6n(这个任务大家都很熟悉啦,我们就不做介绍了,后文以php代替)与mongodb,我(php插件);

1. mongodb的简介:
      mongodb的家在E:\ProgramFile\mongodb(下载mongodb到E:\ProgramFile\mongodb)
      mongodb最近找了新工作在E:\data\db她可以在家里的bin车库下打开mongo的车,但是mongo车必须使用mongod的油;(创建mongodb存储文件,打开服务器mongod,打开客户端mongo,命令行操作:E:mkdir data\db
cd ../../
ProgramFile\mongodb\bin\mongod
#重新新打开一个cmd;
E:

ProgramFile\mongodb\bin\mongo
    鉴于mongdb是一个javascript shell 我们先做一个简单的运算,就像在chrome控制台上的js语言一样(测试略);
    接着我们做一个‘数据库’的操作
                首先我们插入一条数据:
                        db.w3r.insert({X:5})      //这是将5插入到w3r集合的x字段中(我们可以使用JS的注释方式)
                        db.w3r.find()                //这是查找
                显示数据即成功!
)
    mongodb有我知道的这么几种职业(基本数据类型,并不完全,详细信息查看手册)
                键值对(Bson):类似与JS 的json;(Bson就是二进制的Json,Binary JSON)
                集合:类似与RDBMS中的表格,但无固定结构                {“id”:"01"}{"id":"02","name":"woodenwang"}
                capped collections:类似于RRD(读接收数据寄存器)
                元数据
    mongodb会的技能有这么几种(基本语法,此处,我们皆用test集合做演示):
                显示所有数据库               show dbs
                显示当前数据库               db
                创建数据库                        use test                              //存在就进入,反之创建,新建的数据库插入数据即可显现;
                删除数据库                        db.dropDatabase()
                删除集合                        db.collection.drop()
                插入集合                        db.test.insert({"title":"你想不到优秀","content":"有些人的优秀,你永远也想象不到。多么可怕。多么恐惧!"})
                更新集合                        db.collection.update(查询条件,更新的数据,不存在查询的记录是否新建默认否,只更新找到的第一条数据)
                删除集合                        db.collection.remove()      //有3个可选参数,第一个为删除文档的条件,另一个为是否删除一个文件,最后一个是抛出异常的级别
                查询文档                        db.test.find()
                                                      db.test.find().pretty()      //格式化方法显示文档;
                以上是增删改查,其他请查阅手册

2.php与mongodb 的故事:
    此刻我也要出场了,作为专业接线人(接红线{:301_988:}),我也要知道php的能力(php版本)家在哪(操作系统,此处是编译php的操作系统)是否安全可靠(php线程安全),此时我也得稍微介绍一下我自己,我有两个职业,分别是mongo扩展和mongdb扩展,具体能力如下:
      原本用 mongo 一些查询操作返回一个数组的,在 mongodb 中变成游标读取的形式。
         mongo插件 这个扩展已经废弃了,不过 bug 和 security 方面的问题还会继续修复,不支持PHP7
         mongodb插件 支持PHP7,同时不断加入 MongoDB 新版本的特性支持
   为了以后发展的更好我们当然选择mongodb插件喽,此时我们要给php包装(引入插件)了,鉴于我们的了解(我的配置是windows下php5.6n(n就是nts,即非线程安全)compiler:vc11,Architecture:X86,Thread Safety:disable(phpinfo查看))所以我们需要给php购买(下载)php_mongodb-1.2.9-5.6-nts-vc11-x86包;
    接下来就是开包,杂物我们不需要,直接拿出(粘贴)php_mongodb.dll,放到php的口袋里(粘贴在php安装根目录中的ext文件夹中),当然还要在php的身份证中加入这个包装(打开php.ini文件并将extension=php_mongodb.dll写入),重新区办理身份证(重启服务器,查看phpinfo,存在即成功,不存在请返回查找插件);
    最后是撮合php与mongo:
      额,此处真所谓是阅尽千帆啊,
                $m=new MongoDB();
                $m=new MongoClient();
                这些都不可以,有说插件ts与nts的关系,还有说啥来着,忘了;
                然后我们用phpStorm点击跳转MongoDB,MongoClient竟然都可以跳过去;但是网页上就是显示      Class 'MongoDB' not found
                查看mongoDB 的服务器也没有动静
                这种感觉就像去饭店吃饭,吃的很爽,但是发现无法支付!!!!!怎么办?麻烦朋友过来了;
      //以下内容源于php官网$manager = new MongoDB\Driver\Manager();
/* Insert some documents so that our query returns information */
$bulkWrite = new MongoDB\Driver\BulkWrite;
$bulkWrite->insert(['name' => 'Ceres', 'size' => 946, 'distance' => 2.766]);
$bulkWrite->insert(['name' => 'Vesta', 'size' => 525, 'distance' => 2.362]);
$manager->executeBulkWrite("test.asteroids", $bulkWrite);

/* Query for all the items in the collection */
$query = new MongoDB\Driver\Query( [] );

/* Query the "asteroids" collection of the "test" database */
$cursor = $manager->executeQuery("test.asteroids", $query);

/* $cursor now contains an object that wraps around the result set. Use
* foreach() to iterate over all the result */
foreach($cursor as $document) {
    print_r($document);
}
      在网页中打开。显示出数组,查看服务器会有显示集合被写入;
      此刻欢天喜地入洞房;
      以后便是随他们发展了




https://static.52pojie.cn/static/image/hrline/line7.png
https://static.52pojie.cn/static/image/hrline/line7.png
故事纯属编造,切勿相信,php与mongo链接确实是真真切切的从一个个坑里爬出来,很多地方或许也没弄明白,最后的那个成功的方法灵感来源于java的JDBSC:ODBC连接器,

这里下载MongoDB中文手册下载地址:


https://static.52pojie.cn/static/image/hrline/5.gif

{:301_978:}你有一个热心,我有一个热心,我们就有两个热心!{:301_978:}

woodenwang 发表于 2018-7-18 11:27

无故事版操作,后缀名是 .study,直接使用文本编辑器打开即可
   链接: https://pan.baidu.com/s/1HQoqt5ubZrelbJWkZk_g0A 密码: 52pj

tjlbj 发表于 2018-7-18 11:18

看这个文章还真有点费劲,可能不懂的人更不容易懂

兔子爱吃香蕉皮 发表于 2018-7-18 11:24

写的挺有意思的,很容易理解,谢谢{:301_993:}

woodenwang 发表于 2018-7-18 11:26

tjlbj 发表于 2018-7-18 11:18
看这个文章还真有点费劲,可能不懂的人更不容易懂

{:301_972:}仔细想想确实有点乱

wmcn 发表于 2018-7-18 11:26

厉害了学习下

素问何问 发表于 2018-7-18 12:01

不能用mysql的思维来学习mongo否则你展不开 附:https://github.com/doctrine/mongodb-odm

demon_lin 发表于 2018-7-18 14:23

你的排版。。

凯飒风霜 发表于 2018-7-22 00:03

很好,可以试着操作一波
页: [1]
查看完整版本: [转载]php与mongodb在我的撮合下,不得不说的秘密