『壹』 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"; }