Bookmark and Share

Lee's 程序人生

HTML CSS Javascript XML AJAX ATLAS C# C++ 数据结构 软件工程 设计模式 asp.net Java 数字图象处理 Sql 数据库
  博客园  :: 首页  :: 新随笔  :: 联系 :: 管理

mongoDB应用

Posted on 2010-02-24 15:23  analyzer  阅读(928)  评论(0)    收藏  举报
查询: 

MySQL:

    SELECT * FROM user
Mongo:    
    db.user.find()

MySQL:
    SELECT * FROM user WHERE name = 'starlee'
Mongo:    
    db.user.find({'name' : 'starlee'})

插入: 

MySQL:

    INSERT INOT user (`name`, `age`) values ('starlee',25)

Mongo:    

   db.user.insert({'name' : 'starlee', 'age' : 25})


if you want add a  column `email` on MySQL,you must :

   ALTER TABLE user….

But in Mongo,you can just:    

  db.user.insert({'name' : 'starlee', 'age' : 25, 'email' : 'starlee@starlee.com'}) 


删除:

MySQL:

    DELETE * FROM user

Mongo:    

    db.user.remove({})


MySQL:

    DELETE FROM user WHERE age < 30

Mongo:    

    db.user.remove({'age' : {$lt : 30}})


$gt : > ; $gte : >= ; $lt : < ; $lte : <= ; $ne : != 

 

更新:

 

 MySQL:

    UPDATE user SET `age` = 36 WHERE `name` = 'starlee'

Mongo:    

    db.user.update({'name' : 'starlee'}, {$set : {'age' : 36}})


MySQL:

    UPDATE user SET `age` = `age` + 3 WHERE `name` = 'starlee'

Mongo:    

   db.user.update({'name' : 'starlee'}, {$inc : {'age' : 3}})

 

==============Split=======================

MySQL:

    SELECT COUNT(*) FROM user WHERE `name` = 'starlee'

Mongo:    

    db.user.find({'name' : 'starlee'}).count()


MySQL:

    SELECT * FROM user limit 10,20

Mongo:    

   db.user.find().skip(10).limit(20)

 

MySQL:

    SELECT * FROM user WHERE `age` IN (25, 35,45)

Mongo:    

    db.user.find({'age' : {$in : [25, 35, 45]}}) 

MySQL:

    SELECT * FROM user ORDER BY age DESC

Mongo:    

    db.user.find().sort({'age' : -1})


MySQL:

    SELECT DISTINCT(name) FROM user WHERE age > 20

Mongo:    

   db.user.distinct('name', {'age': {$lt : 20}})

 

MySQL:

    SELECT name, sum(marks) FROM user GROUP BY name

Mongo:    

    db.user.group({

        key : {'name' : true},

        cond: {'name' : 'foo'},

        reduce: function(obj,prev) { prev.msum += obj.marks; },

        initial: {msum : 0}

    });


MySQL:

    SELECT name FROM user WHERE age < 20

Mongo:    

   db.user.find('this.age < 20', {name : 1}) 

 更多高级应用:http://www.mongodb.org/display/DOCS/Advanced+Queries

===================Sharding=====================

 >db.runCommand({addShard:"<serverhostname>[:<port>]>"});

 >db.runCommand({enablesharding:"<dbname>"});

 >db.runCommand({shardcollection:"test.users",key:{email:1},unique:true}) ;

===================GridFS=====================

files:object metadata

 

{
    
"_id" : <unspecified>,     //unique ID for this file
    "filename" : data_string,    //human name for the file
    "contentType" : data_string, //valid mime type for the object
    "length" : data_number,      //size of the file in bytes
    "chunkSize" : data_number,   //size of each of the chunks.Default is 256k
    "uploadDate" : data_date,    //date when object first stored
    "aliases" : data_array of data_string, //optional array of alias strings
    "metadata" : data_object,    //anything the user wants to store
    "md5" :data_string,          //result of running the "filemd5" command on this file's chunks
 

 

 

chunks:binary data 

{
    
"_id" : <unspecified>,     //object id of the chunk in the chunks collection
    "file_id" : <unspecified>//_id value of the owning {{files}} collection entry
    "n" : data_number,         //"chunk number" - chunks are numbered in order,starting with 0
    "data" :data_binary (type 0x02), // binary data for chunk
}

 

 

================Use GridFS in PHP=====================

  1 /**

 2 * Store image
 3 *
 4 * @param string $file
 5 * @return int
 6 */
 7 public funtion storeFile($file){
 8     $mongo  = new Cola_Mongo();
 9     return $mongo->storeFile('/path/to/starlee.jpg');
10 }
11 /**
12 * Display image
13 *
14 */
15 public function display(){
16     $mongo = new Cola_Mongo();
17     $file = $mongo->file('/path/to/starlee.jpg');
18     header("Content-type:image/jpeg");
19     echo $file->getBytes();
20 }