1 mongodb啓動時,設置啓動項
C:\>mongodb\bin\mongod --config C:\mongodb.conf
其中mongodb.conf爲:
dbpath = D:\mongodb_data
logpath = D:\mongodb.log
logappend = true
若是是linux的話,則mongod --config /etc/mongodb.conf
2 中止server
db.shutdownServer()
3 經常使用操做:
use myfirstdb
插入db
db.movies.insert({name:"Source Code", genre:"sci-fi", year:2011})
查找全部記錄
db.movies.find()
4 php 5.2 mongo driver下載:
http://downloads.mongodb.org/mongo-latestphp5.2vc6ts.
zip
5.3 mongo driver下載:
http://downloads.mongodb.org/mongo-latest-php5.3vc6ts.zip
把DLL複製到extension目錄,而後
extension=php_mongo.dll便可
5 列出當前數據庫的php mongodb程序
<?php
try{
$mongo = new Mongo(); //create a connection to MongoDB
$databases = $mongo->listDBs(); //List all databases
echo '<pre>';
print_r($databases);
$mongo->close();
} catch(MongoConnectionException $e) {
//handle connection error
die($e->getMessage());
}
?>
若是是鏈接時用不一樣的端口,構造函數中用:
$mongo = new Mongo($server="mongodb://localhost:8888");
也能夠指定timeout的策略;
try {
$mongo = new Mongo($options=array('timeout'=> 100))
} catch(MongoConnectionException $e) {
die("Failed to connect to database ".$e->getMessage());
}
6 經過PHP保存對象到mongo db中
$connection = new Mongo();
$database = $connection->selectDB('myblogsite');
$collection = $database->selectCollection('articles');
$article = array();
$article['title'] = $_POST['title'];
$article['content'] = $_POST['content'];
$article['saved_at'] = new MongoDate();
$collection->insert($article);
注意的是,默認不用顯式create database便可,若是不存在則會自動
新創建database,也能夠:
$connection = new Mongo();
$collection = $connection->myblogsite->articles;
mongodb的插入是異步的,若是不想異步,能夠這樣;
try {
$status = $connection->insert(array('title' => 'Blog Title',
'content' => 'Blog Content'),
array('safe' => True));
echo "Insert operation complete";
} catch (MongoCursorException $e) {
die("Insert failed ".$e->getMessage());
}
則必須等插入完成後才返回給用戶,繼續執行下一條語句
也能夠指定timeout的策略:
$collection->insert($document, array('safe' => True,
'timeout' => True));
7 設置本身的自增id
$document = array('_id' => hash('sha1', $username.time()),
將設置id爲username後加上當前時間再hash.
8 日期設置
$article['saved_at'] = new MongoDate();
$timestamp = new MongoDate(strtotime('2011-05-21 12:00:00'));
print date('g:i a, F j', $timestamp->sec); //prints 12 pm, May 21
$lastweek = new MongoDate(strtotime('-1 week')); //找出一個星期以來的記錄
$cursor = $articleCollection->find(array('saved_at' =>
array('$gt' => $lastweek)));
指定必定範圍內的記錄:
$start = new MongoDate(strtotime('2011-05-01 00:00:00'));
$end = new MongoDate(strtotime('2011-05-31 23:59:59'));
$articleCollection->find(array('saved_at'=>
array('$gte' => $start,
'$lte' => $end)));
9 列出某個表的全部記錄
$cursor = $collection->find();
<?php while ($cursor->hasNext()):
$article = $cursor->getNext(); ?>
<h2><?php echo $article['title']; ?></h2>
............
找某條記錄:$article = $collection->findOne(array('_id'=>
new MongoId($id)));
查找時也能夠傳入多個參數:
$moviesCollection->find(array('genre' => 'comedy', 'year' => 2011));
if ($cursor->count() === 0) //若是找不到
若是查詢多個條件:
$collection->find(array('x' => array('$gt' => 100)));
//$ is escaped within double quotes (")
$collection->find(array('x' => array("\$gt" => 100)));
注意要用單引號,若是要用雙引號,則要加上轉義符。
10 排序:
$cursor->sort(array('saved_at' => -1)) //按save_at字段降序排列,1爲升序
11 skip和limit:
$cursor = $articleCollection->find();
//skip the first five articles in the cursor
$cursor->skip(5);
$cursor->limit(10);//結果集只取10條
12 更新數據庫
$articleCollection->update(array('_id' => new MongoId($id)),
$article);
第一個參數爲指定的條件(更新條件),第二個參數爲要更新的對象
還有可選參數以下;
$collection->update($criteria, $newobj, array('safe' => True));
safe=true時,等到UPDATE結束才返回結果
mongodb還支持upsert的操做:若是存在則更新,若是不存在則插入
$users->update(array('email' => 'alice@wonderland.com'),
array('firstname' => 'Alice', 'lastname'=> 'Liddell'),
array('upsert' => True));
這裏對email爲alice@wonderland.com的記錄進行更新其firstname,lastname字段的內容
13 修飾符
好比set,只修改記錄的某個部分,能夠這樣:
$articles->update(array('_id' => MongoId('4dcd2abe5981')),
array('$set' => array('title' => 'New
Title')));
使用inc:
$articles->update(array('_id' => MongoId('4dcd2abe5981')),
array('$set' => array('content' => 'New Content'),
'$inc' => array('update_count' => 1)));
將update_count+1
unset:
$articles->update(array('_id' => MongoId('4dcd2abe5981')),
array('$unset' => array('title' => True)));
將title field從這個document中移除
改名rename:
$articles->update(array(),
array('$rename' => array('saved_at' =>
'created_at')),
array('multiple' => True));
將save_at改名爲create_at
14 刪除記錄
$articleCollection->remove(array('_id' => new MongoId($id)));
$movies->remove(array('genre' =>'drama'),
array('justOne' => True));
若是加了justOne的參數,則只刪除符合條件的一條記錄而已,其餘不刪除
15 document的關係
1)嵌套
{
"_id" : ObjectId("4dd491695072aefc456c9aca"),
"username" : "alphareplicant",
"email" : "roybatty@androids.org",
"fullname" : "Roy Batty",
"joined_at" : ISODate("2011-05-19T03:41:29.703Z"),
"address" : {
"street" : "13 Tannhauser Gate",
"city" : "Caprica",
"state" : "CC",
"zipcode" : 512
},
}
2)引用
{
_id : ObjectId("4dcd2abe5981aec801010000"),
title : "The only perfect site is hind-site",
content : "Loren ipsum dolor sit amet…",
saved_at : ISODate('2011-05-16T18:42:57.949Z'),
author_id : ObjectId("4dd491695072aefc456c9aca")
}
3)好比一個一對多的關係:
好比一個文章下的評論:
$comment = array(
'name' => $_POST['commenter_name'],
'email' => $_POST['commenter_email'],
'comment' => $_POST['comment'],
'posted_at' => new MongoDate()
);
$collection->update(array('_id' => new MongoId($id)),
array('$push' => array('comments' =>
$comments)));
使用的是$push的修飾符,通常來講,用內嵌的document效率比較高
或者:
$article = $articleCollection->findOne(array('_id' => new MongoId($id)));
$comments = (isset($article['comments'])) ? $article['comments'] : array();
$comment = array(
'name' => $_POST['commenter_name'],
'email' => $_POST['commenter_email'],
'comment' => $_POST['comment'],
'posted_at' => new MongoDate()
);
array_push($comments, $comment);
$articleCollection->update(array('_id' => new MongoId($id)), array('$set' => array('comments' =>
$comments)));
使用.號來查詢子嵌套文檔
{
name : "Gordon Freeman",
address : {
city : "Springfield",
state : "Florida"
}
}
{
name : "Lara Croft",
address : {
city : "Miami",
state: "Florida"
}
}
則查詢address中state爲florida的document:
$users->find(array('address.city' => 'Springfield',
'address.state' => 'Florida')); php
轉自:http://jackyrong.iteye.com/blog/1333419 linux