//格式=>("mongodb://用户名:密码@地址:端口/默认指定数据库",参数)
$conn = new Mongo("mongodb://127.0.0.1:27017"); // 连接到mongodb
//连接mongodb数据库
$conn = new MongoClient();
//选择数据库和文档集合
$db = $conn->mydb; #选择mydb数据库
$db = $conn->selectDB(“mydb”); #选择mydb数据库 第二种写法
$collection = $db->test; #选择集合(选择’表’)
$db->selectCollection(‘column’); #选择集合(选择’表’)第二种写法
$collection = $conn->local->User;#更简洁的写法,一步到位
#插入一条记录
$res = $collection->insert(array("id"=>1,"username"=>"admin","age"=>18,"email"=>"admin@qq.com"));
#根据条件更新数据
$res = $collection->update(array("username"=>"admin"),array("$set"=>array("age"=>25)));
#根据条件删除数据
$res = $collection->remove(array("username"=>"test"));
#查询一条记录
$res = $collection->findOne(array("username"=>"admin"));
#查询
$res = $collection->find();
#根据正则查询符合条件数据
$res = $collection->find(array("username"=>new MongoRegex("/admin/i")));
//db.User.find({"username":/admin/i}) #原生态模糊查询(/XXX/i 正则忽略大小写)
#统计数量
$res = $collection->count();
#带条件的统计
$res = $collection->count(array("username"=>new MongoRegex("/admin/i"),'age'=>array('$gt'=>21,'$lt'=>80)));
#带条件的统计另一种写法
$res = $collection->find(array("username"=>new MongoRegex("/admin/i"),'age'=>array('$gt'=>21,'$lt'=>80)))->count();
#注:$gt为大于、$gte为大于等于、$lt为小于、$lte为小于等于、$ne为不等于、$exists不存在
#分页取数据
$count = $collection->find()->limit(10)->skip(10)->count(true);
//#获得实际返回的结果数 (count()或count(0)或count(false)返回全部数据,count(1)或count(true)返回分页数据)
//true显示列,false隐藏列 sort排序:-1=desc 1=asc
$res = $collection->find(array('age' => array('$gt' => 23, '$lt' => 93)))->fields(array("age" => true, "_id" => false))->sort(array('age' => -1));
/** 创建索引
$collection->ensureIndex(array('age' => 1,'type'=>-1)); #1表示降序 -1表示升序
$collection->ensureIndex(array('age' => 1,'type'=>-1),array('background'=>true)); #索引的创建放在后台运行(默认是同步运行)
$collection->ensureIndex(array('age' => 1,'type'=>-1),array('unique'=>true)); #该索引是唯一的
*/
******************************************mongodb复制远程数据库和表start******************************************************************
$con1 = new Mongo("mongodb://192.168.1.243:7788"); // 连接到服务器
$con2 = new Mongo("mongodb://127.0.0.1:27017"); // 连接到本地
$db1 = $con1->ak_sys;
$db2 = $con2->ak_sys;
$res1 = $db1->feedback->find();
foreach ($res1 as $k => $v) {
//echo"<pre>";print_R($v);
$res2 = $db2->feedback->insert($v);#简单插入
echo $res2['ok']? 'success' : 'failed';
echo "<br/>";
}
******************************************mongodb复制远程数据库和表end******************************************************************
******************************************where条件可以用js函数方式start******************************************************************
$where['$where'] = "
function(){
var pos_code = this.pos_code;
var count= this.count;
if(pos_code =='d' && count==0){
return true;
}
}";
$res = $db2->feedback->find($where);
*******************************************where条件可以用js函数方式end******************************************************************
日期转换时间戳,再用mongoDate函数:new MongoDate(strtotime(date("Y-m-d H:i:s")));
demo:
$start = new MongoDate(strtotime(date("2011-02-15 00:00:00")));
$end = new MongoDate(strtotime(date("2017-12-15 23:59:59")));
查询分组统计
$where['$match'] = array(
'click_time' => array('$gt' => $start, '$lte' => $end));
//管道效应:group中的click_time是where传过来的
$group['$group'] = array(
'_id' => array(
'year' => array('$year' => '$click_time'),
'month' => array('$month' => '$click_time'),
'day' => array('$dayOfMonth' => '$click_time')
),
'total' => array('$sum' => 1)
);
$res = $db2->test->aggregate($where, $group);
// echo count($res['result']);//获取分组后的总数量
// echo"<pre>";print_R($res);
echo $db2->test->find(array('click_time'=>array('$gte' => $start, '$lte' => $end)))->count();
$res = $db2->test->find(array('click_time' => array('$gt' => $start, '$lte' => $end)));
// foreach ($res['result'] as $k => $v) {
// $v['click_time'] = date('Y-m-d H:i:s', $v['click_time']->sec);
// $v['create_time'] = date('Y-m-d H:i:s', $v['create_time']->sec);
// $v['_id'] = $v['_id']->{'$id'}; //取mongoid字符串
// echo"<pre>";
// print_R($v);
// }
where模糊查询分组排序分页
$op = array(
array(
'$match' => array(
'click_time' => array(
'$gte' => $start,
'$lte' => $end
),
'pos_code' => new MongoRegex('/^dd$/'),//正则匹配pos_code含有dd字符的
'remark' =>'', //等于空
'title' => array('$ne'=>null),//不等于空
)),
array(
'$group' => array(
'_id' => array(
'dev_id' => '$dev_id',
'pos_code' => '$pos_code',
'status' => '$status',
'title'=>'$title',
'year' => array('$year' => '$click_time'),
'month' => array('$month' => '$click_time'),
'day' => array('$dayOfMonth' => '$click_time')
)
)
),
array('$sort' => array('click_time' => -1)),
array('$skip' => 0),
array('$limit' => 100),
);
$res3 = $db2->test->aggregate($op);
echo"<pre>";
print_R($res3);
die;
//$result = $db2->test->update(array('img_url'=>' '),array('$set'=>array("pos_code"=>time())));//更新文档
// echo $result ? 'success' : 'failed';echo "<br>";
原生态mongodb操作方法:
MONGODB:数据库(db)->集合(table)->文档(row)
D:\mongodb\bin>mongod.exe --dbpath "d:\set up\mongodb\data" //设置mongodb数据路径:
D:\mongodb\bin>mongo.exe//启动mongodb
>use mydb//创建数据库 返回数据库名称
>db mydb//查看数据库信息
>show dbs//查看数据库(创建的数据库mydb 列表中是不存在的。要显示的数据库,需要把它插入至少一个文件。)
db.movie.insert({"name":"tutorials point"})
db.movie.save({"name":"tutorials point"})//保存数据
>use mydb
>db.dropDatabase()//删除数据库
>use test //创建集合{ 当插入一些文件 MongoDB 自动创建的集合。}
>db.createCollection("mycollection")
>show collections//查看创建集合
>db.集合名称.drop()//删除集合
>db.集合名称.find()//查询集合
>db.hello.find().pretty()//格式化返回集合数据
>db.hello.find({key1:value1, key2:value2}).pretty()//根据条件查询 AND
>db.hello.find({$or:[{key1:value1},{key2:value2}]}).pretty()//根据条件查询 OR
>db.hello.find("age": {$gt:10}, $or: [{"name": "li"}, {"title": "book"}] }).pretty()//AND 和 OR
//where age >10 and(name=li or title =book )
//可以使用操作符完成更复杂的操作,常用操作符有:$lt , $lte , $gt , $gte ( < , <= , > , >= ), $ne ( <> ) ,$in , $nin , $or , $not, $mod (取模), $exists, $where
//db.hello.find( {"age" : { “$lt” : 20 } } )
>db.COLLECTION_NAME.update(SELECTIOIN_CRITERIA, UPDATED_DATA)//更新文档值(MongoDB默认将只更新单一的文件,来更新多个你需要设置参数置'multi' 为true)
>db.hello.update({'name':'lis'},{$set:{'name':'dragoners.li','age':23}})
>db.hello.remove({'name':'abc'})//删除记录
>db.hello.remove({'name':'abc'},1)//删除一条记录
>db.hello.remove({})//全部删除相当于mysql的truncate
>db.hello.find({},{"name":'abc',_id:0})//_id:0把_id设置为0.返回。类似mysql的视图。
>db.hello.find().limit(3)//类似mysql的limit(0,3)从0开始取3条记录。(参数不写或写0时返回全部)
>db.hello.find().limit(3).skip(2)//类似mysql的limit 限制记录条件,skip忽略前N条记录
//Sort : 排序 -1(降序) 1(升序);
//Count: 记录数
//getIndexes() 获取索引信息
// dropIndexes() : 删除所有索引
//dropIndex( name )删除某个索引