‘壹’ php 远程连接Mongodb问题
<?php //这里采用默认连接本机的27017端口,当然你也可以连接远程主机如192.168.0.4:27017,如果端口是27017,端口可以省略 $m = new Mongo(); // 选择comedy数据库,如果以前没该数据库会自动创建,也可以用$m->selectDB("comedy"); $db = $m->comedy; //选择comedy里面的collection集合,相当于RDBMS里面的表,也-可以使用 $collection = $db->collection; $db->selectCollection("collection"); //添加一个元素 $obj = array( "title" => "Calvin and Hobbes-".date('i:s'), "author" => "Bill Watterson" ); //将$obj 添加到$collection 集合中 $collection->insert($obj); //添加另一个元素 $obj = array( "title" => "XKCD-".date('i:s'), "online" => true ); $collection->insert($obj); //查询所有的记录 $cursor = $collection->find(); //遍历所有集合中的文档 foreach ($cursor as $obj) { echo $obj["title"] . "<br />\n"; } //删除所有数据 //$collection->remove(); //删除 name 为hm //$collection->remove(array('name'=>'hm')); //断开MongoDB连接 $m->close(); ?>
你可以去后盾人平台看看,里面的东西不错
‘贰’ PHP连接mongodb数据库,页面上有一个查询按钮如果输入条件查询符合该条件的信息如果没有输入则查询全部
在点击查询后,先判断输入内容,如果没有输入直接查询全部,如果有输入,查询输入内容即可,只要做个判断即可。
‘叁’ php如何打开mongodb扩展
1.首先下载php的mongodb扩展
2.解压安装包
tar zxf mongo-1.4.5.tgz
3.进入解压目录,运行phpize进行安装准备
cd mongo-1.4.5
/usr/local/php/bin/phpize
4.安装编译
上述命令运行完后,在目录下就生成了configure文件
使用./configure命令进行安装配置,然后使用make && make install进行编译安装,命令如下:
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
5.编辑php.ini增加下述一行添加mongodb扩展
extension=mongo.so
重启web容器,然后查看phpinfo,看到mongodb的内容就说明安装成功。
‘肆’ 如何用php对mongodb进行模糊查询
$mongo_db->like('name','维达');
你试试看还不行的话楼主可以自己去后盾人看看,还送后盾会员卡哦
‘伍’ mongodb 乐观锁怎么使用php
sql中并发控制采用的乐观锁就是在记录中增加版本号或timestamp,那么MongoDB中如何实现呢?
Mongodb不善于处理事务,但提供了findAndModify命令。该命令允许对文档进行原子性更新,并在同一次调用中返回:
代码如如:
db.collection_yown.findAndModify(
{
query:{"name":"yown"},update:{"version":2},new:true or false
}
)
默认情况下,findAndModify命令会返回更新前的文档,要是返回修改后的文档,就把new设置为false.
Mongodb同时也提供update命令,这两者的区别如下:
update和findAndModify都可以用做更新操作;
区别
findAndModify是有返回值的,输出中的value字段即返回修改之前的文档,使用 new:true选项返回修改后的文档。 update是更新操作,是没有返回值的。
findAndModify 强调操作的原子性(atomically),比如用来实现自增1的操作或者操作队列。属于 get-and-set 式的操作,一般来讲,findAndModify 比update操作稍慢,因为需要等待数据库的响应。
另外findAndModify ,其中modify可以是update,还可以是remove
{
findAndModify: <string>,
query: <document>,
sort: <document>,
remove: <boolean>,
update: <document>,
new: <boolean>,
fields: <document>,
upsert: <boolean>
}
‘陆’ PHP操作MongoDB,怎么把一个集合转为数组
简单的格式匹配用脚本或者批处理就行了。
linux shell可以很容易的过滤出你想要的关键字,windows下的DOS批处理应该也可以。
‘柒’ php7 mongodb 扩展 真的很差吗
MongoDB\Driver\Manager::executeBulkWrite
这玩意还配置了一个巨大的类库来配合调用:就是这个:https://github.com/mongodb/mongo-php-library ,纯粹是脱裤子放P,多此一举,本来原生扩展就已经巨长、巨难用,还配一个根本没有简化任何代码的库有什么意义?甚至于调用这个类库比原生的名字更长、更啰嗦,而且多了一层封装就多一次bug机会。
这个库文件总共63个,看看,如果你随便写个脚本访问一下mongodb,还得包含63个文件,我TM整个项目都没有63个文件好不好?这些个写惯了java的没事就老老实实写java,都跑来写php,php是要解析执行的,又不像jvm那么编译优化执行,搞那么多文件,不影响执行速度吗?真是狗屎,所以完全不推荐用这个狗屎库。
但是这个扩展最奇怪的就是文档超级简陋,根本不能获得任何有价值的信息,所以只能靠摸索来了。
下面是我用到的由MongoClient迁移到MongoDB\Driver的差异点。
MongoClient插入或更新是同样的代码:
(new MongoClient())->{$db}->{$collection}->save($arr);
// 这个$arr数组可以直接含有 "_id" 索引来指定 mongodb文档的_id值,就这么简单粗暴,这才是php啊!
MongoDB\Driver,插入和更新需要区分:
$mongo = new MongoDB\Driver\Manager();
$bulk = new MongoDB\Driver\BulkWrite(['ordered' => true]);
$data = $mongo->executeQuery('db.collection', new MongoDB\Driver\Query([]), new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_PRIMARY_PREFERRED))->toArray();
if (empty($data[0])) { // 确定不存在,插入
$bulk->insert($arr);
} else { // 否者更新
$bulk->update([], array('$set' => $arr)); // $arr同样是刚才的数组
}
// 还没完,还要执行下一步:db.collection要替换成实际的数据库、集合名
$result = $mongo->executeBulkWrite('db.collection', $bulk, new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 1000));
// 返回插入或更新是否成功:
$ok = $result->getInsertedCount() || $result->getModifiedCount() ? 1 : 0;
// 真是够了!
查询一条记录:
MongoClient:
(new MongoClient())->{$db}->{$collection}->findOne(['_id' => $id]);
MongoDB\Driver:
$mongo = new MongoDB\Driver\Manager();
$result = $mongo->executeQuery('db.collection', new MongoDB\Driver\Query(['_id'=>$id], []), new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_PRIMARY_PREFERRED));
// 返回的$result是一个对象,需要手动转换成数组。
查询数量时候,需要注意:
$mongo = new MongoDB\Driver\Manager();
$cursor = $mongo-executeCommand($db, new MongoDB\Driver\Command($arr), new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_SECONDARY_PREFERRED));
// 这里$cursor是一个游标。需要注意$arr里的字段:
$arr = ['count'=>$collection, 'query'=>$query]; // 这里count必须排在前面,位置反了直接报异常。
查询结果集:
$mongo = new MongoDB\Driver\Manager();
$cursor = $mongo->executeQuery('db.collection', new MongoDB\Driver\Query($arr, $opts), new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_PRIMARY_PREFERRED));
//注意,这里的 $arr和 $opts;
$arr = ['_id'=> ['$in'=> $ids] ]; // 根据id数组获取集合
$opts = ['limit'=> $limit, 'skip'=> $skip ]; // 不推荐
// 这里在传递$limit和$skip的时候,最好先转成整数,不然不生效:
$opts = ['limit'=> (int) $limit, 'skip'=> (int) $skip ]; // 推荐写法。
// 写到这里,让人怀疑是不是在用php了,怎么还需要这样的类型转换。字符串整数都不行!
基本就这样,推荐自己封装一个简单的MongoDB\Driver,而不是使用那个巨大无比的库、也不推荐直接用原生
‘捌’ ThinkPhp框架中使用mongodb数据库配置报错Call to a member function selectCollection() on a non-object
TP3.1的解决方法就是如楼上所说,需要实例化mong数据库的模型。
so 有两种方式:
直接在使用的方法内实例化MongoModel类;
写一个model专门继承MongoModel,把需要连mongo的操作或方法都丢里面去,然后在需要的页面中D()一下这个model中的某一方法即可.
如下图代码:
‘玖’ PHP添加了mongodb,已经加载了组件,为什么在phpinfo中不显示mongo信息
我说点题外话希望对你有些帮助吧
看你用的应该是集成环境,不知道是不是wamp;
我在wamp上有一次经历,命名在wamp开启curl可是通过命令行执行php时提示curl没有开启;
后来查了写资料才知道,wamp图标里点的php.ini不是在bin/php/php5.*.*/下的php.ini;而是在apache的bin目录下的php.ini;这两个文件的目录位置不一样不知道会不会对你说的情况造成影响.只是说说而已,勿喷
‘拾’ PHP 操作mongodb,能显示出指定表的所有字段么
if(mysql_num_rows(mysql_query("SHOW TABLES LIKE '".$table."'")==1) { echo "Table exists"; } else { echo "Table does not exist"; }