标签:mongodb

mongodb => sql 语法集 [转自乐在自由]

Connecting, Creating and using a DB, Create a Table / Collection

$link = new Mongo();       $link = mysql_connect($host, $user, $pass, 1) or die(“Could not connect to: {$host}.”);

$db = $link->testdb;         $sql = “CREATE DATABASE `$db`”; mysql_select_db($db`,$link);

$col = $db->user;               $sql = “CREATE TABLE ‘user’…;      mysql_query($sql,$link);

$col->drop();         mysql_query(DROP TABLE `$db`.`$tbl`, $link);

$db->drop();          mysql_query(DROP DATABASE `$db`, $link);

$link->close();       mysql_close($link);

Insert Data

$doc= array(‘login’ => ‘jsmith’, ‘password’ => ‘ 5f4dcc3b5aa765d61d8327deb882cf99′, ’email’ => ‘jsmith@example.com’);
mysql_query(“INSERT INTO `$tbl` SET `login`=’jsmith’,`password`=’5f4dcc3b5aa765d61d8327deb882cf99′,`email`=’jsmith@example.com'”);

$id = $doc[‘_id’];         $id = mysql_insert_id($link);

Updating Data

$col->update(array(‘_id’ => $id), array(‘$set’ => array(‘password’ => ‘b497dd1a701a33026f7211533620780d’)));

$qry = mysql_query(“UPDATE `$tbl` SET `password` = ‘b497dd1a701a33026f7211533620780d’ WHERE `id` = {$id}”, $link);

Indexing data

$col->ensureIndex(array(“login” => 1), array(“unique” => true, “dropDups” => true));

$qry = mysql_query(“ALTER TABLE `$db`.`$tbl` ADD UNIQUE `login` (`login`)”, $link);

Querying Data

$res = $col->find();                                               SELECT * FROM `$tbl`

$doc = $col->findone(array(‘_id’ => $id));          SELECT * FROM `$tbl` WHERE `id` = {$id}

$res = $col->find()->limit(1);                                SELECT * FROM `$tbl` LIMIT 1

$res = $col->find()->skip(1)->limit(1);                                         SELECT * FROM `$tbl` OFFSET 1 LIMIT 1;

$res = $col->find()->sort(array(‘login’ => -1));                            SELECT * FROM `$tbl` ORDERBY `login` DESC //-1=DESC,1=ASC

$res = $col->find(array(‘age’ => array(‘$lt’ => 30)));                   SELECT * FROM `$tbl` WHERE `age` < 30                 //$lt:<,$gt:>,$gte:>=, $lte:<=, $ne:!=

$doc = $col->find(array(’a’=>’hello’,’b’=>1));                                SELECT * FROM `$tbl` WHERE `a` = ‘hello’ AND `b`=1

$doc = $col->find(array(’a’=>’hello’,’b’=>array(’$gt’=>1)));                  SELECT * FROM `$tbl` WHERE `a` = ‘hello’ AND `b`>=1

$res = $col->find(array(‘age’ => array(‘$gte’ => 20, ‘$lte’ => 50)));              SELECT * FROM `$tbl` WHERE `age` >= 20 AND `age` <= 50

$col->remove(array(‘age’=>24),array(‘justOne’=>true,’safe’=>true));          DELETE FROM `$tbl` WHERE `login` = ‘psmith’

MongoCollection::insert(array $a,array $options)    //$a要插入的数组, $options选项:safe是否返回结果信息,fsync是否直接插入到物理硬盘

db.linlin.find({id:10})                                返回linlin数据集ID=10的数据集

db.linlin.find({id:10}).count()                             返回linlin数据集ID=10的数据总数

db.linlin.find({id:10}).limit(2)                            返回linlin数据集ID=10的数据集从第二条开始的数据集

db.linlin.find({id:10}).skip(8)                    返回linlin数据集ID=10的数据集从0到第八条的数据集

db.linlin.find({id:10}).limit(2).skip(8)      返回linlin数据集ID=1=的数据集从第二条到第八条的数据

db.linlin.find({id:10}).sort()                      返回linlin数据集ID=10的排序数据集

db.linlin.findOne([query])                        返回符合条件的一条数据

db.linlin.getDB()                                       返回此数据集所属的数据库名称

db.linlin.getIndexes()                               返回些数据集的索引信息

db.linlin.group({key:…,initial:…,reduce:…[,cond:…]})

db.linlin.mapReduce(mayFunction,reduceFunction,)

db.linlin.remove(query)                            在数据集中删除一条数据

db.linlin.renameCollection(newName)   重命名些数据集名称

db.linlin.save(obj)                                     往数据集中插入一条数据

db.linlin.stats()                                         返回此数据集的状态

db.linlin.storageSize()                              返回此数据集的存储大小

db.linlin.totalIndexSize()                          返回此数据集的索引文件大小

db.linlin.totalSize()                                   返回些数据集的总大小

db.linlin.update(query,object[,upsert_bool])    在此数据集中更新一条数据

db.linlin.validate()                                    验证此数据集


基于MongoDb GridFs的S3实现 [转]

原理是利用MongoDb的GridFS,伸展性方面交由MongoDb的auto sharding去实现,这里用PHP给MongoDb绑了个S3出来,支持选择文件存储节点,支持文件分目录存储,这样的好处是对于一些受时间影响比较明显的文件,可以按照年月的形式存储,减轻历史包袱。

首先,配置MongoDb GridFS节点信息:

[codesyntax lang=”php”]

<?php
$s3Config = array(
    'foo' => array(
        'server' => '127.0.0.1',
        'database' => 'test',
        'user' => 'test',
        'password' => 'foobar',
        'domain' => 'http://s3.foobar.com'
    ),

    'bar' => array(
        'server' => '127.0.0.1',
        'database' => 'test',
        'user' => 'test',
        'password' => 'foobar',
        'domain' => 'http://s3.foobar.com'
    ),
);

[/codesyntax]

MongoDb的S3绑定:

<?php
/**
 * 统一文件存储
 *
 */
class Api_S3
{
    protected 
原理是利用MongoDb的GridFS,伸展性方面交由MongoDb的auto sharding去实现,这里用PHP给MongoDb绑了个S3出来,支持选择文件存储节点,支持文件分目录存储,这样的好处是对于一些受时间影响比较明显的文件,可以按照年月的形式存储,减轻历史包袱。

首先,配置MongoDb GridFS节点信息:

<?php
$s3Config = array(
    'foo' => array(
        'server' => '127.0.0.1',
        'database' => 'test',
        'user' => 'test',
        'password' => 'foobar',
        'domain' => 'http://s3.foobar.com'
    ),

    'bar' => array(
        'server' => '127.0.0.1',
        'database' => 'test',
        'user' => 'test',
        'password' => 'foobar',
        'domain' => 'http://s3.foobar.com'
    ),
);

MongoDb的S3绑定:

___FCKpd___1

文件存入,支持自选节点,自定义目录,自定义文件名,可以自动添加文件类型:

<?php
$s3 = new Api_S3($node, $dir, $s3Config);
$s3->copy($file, array('filename' => $name, 'filetype' => $type));

文件读取,以”http://s3.foobar.com/foo/201005/foobar.jpg”为例,foo映射到节点名,201005映射到目录名,foobar.jpg映射到文件名:

<?php
$s3 = new Api_S3($node, $dir, $s3Config);
$file = $s3->file($name);

Cola_Response::lastModified($file->file['uploadDate']->sec);
Cola_Response::etag($file->file['md5']);

if (isset($file->file['filetype'])) {
    header("Content-Type: {$file->file['filetype']}");
}

echo $file->getBytes();

注意到我们利用了文件的修改时间设置http头的last modified,以及用文件的md5信息设置etag值,这样的好处是可以大大减少带宽使用,当然,你也可以设置expire时间来减少重复请求。

关于性能问题,可以在PHP读取的上一层,加一个Squid之类的反向代理服务,基本上就不会有问题。

本文来自:http://www.fuchaoqun.com/2010/05/s3-on-mongodb-with-php/

node;   protected原理是利用MongoDb的GridFS,伸展性方面交由MongoDb的auto sharding去实现,这里用PHP给MongoDb绑了个S3出来,支持选择文件存储节点,支持文件分目录存储,这样的好处是对于一些受时间影响比较明显的文件,可以按照年月的形式存储,减轻历史包袱。

首先,配置MongoDb GridFS节点信息:

<?php
$s3Config = array(
    'foo' => array(
        'server' => '127.0.0.1',
        'database' => 'test',
        'user' => 'test',
        'password' => 'foobar',
        'domain' => 'http://s3.foobar.com'
    ),

    'bar' => array(
        'server' => '127.0.0.1',
        'database' => 'test',
        'user' => 'test',
        'password' => 'foobar',
        'domain' => 'http://s3.foobar.com'
    ),
);

MongoDb的S3绑定:

___FCKpd___1

文件存入,支持自选节点,自定义目录,自定义文件名,可以自动添加文件类型:

___FCKpd___2

文件读取,以”http://s3.foobar.com/foo/201005/foobar.jpg”为例,foo映射到节点名,201005映射到目录名,foobar.jpg映射到文件名:

___FCKpd___3

注意到我们利用了文件的修改时间设置http头的last modified,以及用文件的md5信息设置etag值,这样的好处是可以大大减少带宽使用,当然,你也可以设置expire时间来减少重复请求。

关于性能问题,可以在PHP读取的上一层,加一个Squid之类的反向代理服务,基本上就不会有问题。

本文来自:http://www.fuchaoqun.com/2010/05/s3-on-mongodb-with-php/

dir;   protected原理是利用MongoDb的GridFS,伸展性方面交由MongoDb的auto sharding去实现,这里用PHP给MongoDb绑了个S3出来,支持选择文件存储节点,支持文件分目录存储,这样的好处是对于一些受时间影响比较明显的文件,可以按照年月的形式存储,减轻历史包袱。

首先,配置MongoDb GridFS节点信息:

<?php
$s3Config = array(
    'foo' => array(
        'server' => '127.0.0.1',
        'database' => 'test',
        'user' => 'test',
        'password' => 'foobar',
        'domain' => 'http://s3.foobar.com'
    ),

    'bar' => array(
        'server' => '127.0.0.1',
        'database' => 'test',
        'user' => 'test',
        'password' => 'foobar',
        'domain' => 'http://s3.foobar.com'
    ),
);

MongoDb的S3绑定:

___FCKpd___1

文件存入,支持自选节点,自定义目录,自定义文件名,可以自动添加文件类型:

___FCKpd___2

文件读取,以”http://s3.foobar.com/foo/201005/foobar.jpg”为例,foo映射到节点名,201005映射到目录名,foobar.jpg映射到文件名:

___FCKpd___3

注意到我们利用了文件的修改时间设置http头的last modified,以及用文件的md5信息设置etag值,这样的好处是可以大大减少带宽使用,当然,你也可以设置expire时间来减少重复请求。

关于性能问题,可以在PHP读取的上一层,加一个Squid之类的反向代理服务,基本上就不会有问题。

[codesyntax lang="php"]

    public function __construct($node, $dir = null, $config = null)
    {
        $this->_config = $config;

        $this->path($node, $dir, false);
    }

    /**
     * 设置文件路径
     *
     * @param string $node
     * @param string $dir
     * @return Api_S3
     */
    public function path($node, $dir, $connect = true)
    {
        $this->_node = $node;
        $this->_dir = empty($dir) ? 'fs' : $dir;

        if (empty($this->_config[$this->_node])) {
            throw new Cola_Exception('Api_S3: invalidate node');
        }

        if ($connect) {
            $this->_gridFS = $this->_gridFS();
        }

        return $this;
    }

    /**
     * GridFS
     *
     * @return MongDbGridFS
     */
    protected function _gridFS()
    {
        $mongo = new Cola_Com_Mongo($this->_config[$this->_node]);

        return $mongo->gridFS($this->_dir);
    }

    /**
     * 获得文件句柄
     *
     * @param string $name
     * @return MongoGridFSFile
     */
    public function file($name)
    {
        if (empty($this->_gridFS)) {
            $this->_gridFS = $this->_gridFS();
        }

        return $this->_gridFS->findOne(array('filename' => $name));
    }

    /**
     * 获得文件内容
     *
     * @param string $name
     */
    public function read($name)
    {
        $file = $this->file($name);

        return $file->getBytes();
    }

    /**
     * 写入文件
     *
     * @param string $name
     * @param string $data
     * @param array $extra
     * @param boolean $overWrite
     * @return boolean
     */
    public function write($name, $data, $extra = array(), $overWrite = false)
    {
        $extra = (array)$extra + array('filename' => basename($name));

        if ($filetype = $this->_type($name)) {
            $extra['filetype'] = $filetype;
        }

        if ($this->file($extra['filename'])) {
            if ($overWrite) {
                $this->delete($extra['filename']);
            } else {
                throw new Cola_Exception('Api_S3: file exists');
            }
        }

        return $this->_gridFS->storeBytes($data, $extra);
    }

    /**
     * 复制系统文件
     *
     * @param string $file
     * @param array $extra
     * @param boolean $overWrite
     * @return boolean
     */
    public function copy($file, $extra = array(), $overWrite = false)
    {
        $extra = (array)$extra + array('filename' => basename($file));

        if ($filetype = $this->_type($file)) {
            $extra['filetype'] = $filetype;
        }

        if ($this->file($extra['filename'])) {
            if ($overWrite) {
                $this->delete($extra['filename']);
            } else {
                throw new Cola_Exception('Api_S3: file exists');
            }
        }

        return $this->_gridFS->storeFile($file, $extra);
    }

    /**
     * 删除文件
     *
     * @param string $name
     * @return boolean
     */
    public function delete($name)
    {
        if (empty($this->_gridFS)) {
            $this->_gridFS = $this->_gridFS();
        }

        return  $this->_gridFS->remove(array('filename' => $name));
    }

    /**
     * 获得文件地址
     *
     * @param string $name
     * @param string $default
     * @return string
     */
    public function getUrl($name, $default = false)
    {
        $data = array(
            'domain' => rtrim($this->_config[$this->_node]['domain'], '/'),
            'path'   => $this->_node . (('fs' == $this->_dir) ? '' : $this->_dir),
            'name'   => $name
        );
        return  implode('/', $data);
    }

    /**
     * 设置文件属性
     *
     * @param string $name
     * @param array $attr
     * @return boolean
     */
    public function setAttr($name, $attr)
    {
        if (!$file = $this->file($name)) {
            throw new Cola_Exception('Api_S3: file not exists');
        }

        $file->file = $attr + $file->file;

        return $this->_gridFS->save($file->file);
    }

    /**
     * 获得文件属性
     *
     * @param string $name
     * @return array
     */
    public function getAttr($name)
    {
        $file = $this->file($name);
        return $file->file;
    }

    /**
     * 获得文件类型
     *
     * @param string $file
     * @return string
     */
    protected function _type($file)
    {
        return mime_content_type($file);
    }
}

[/codesyntax]