monogdb+php,mongodb+php学习1

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程序

try{

$mongo = new Mongo(); //create a connection to MongoDB

$databases = $mongo->listDBs(); //List all databases

echo '';

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();

hasNext()):

$article = $cursor->getNext(); ?>

............

找某条记录:$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'));

# 高校智慧校园解决方案摘要 智慧校园解决方案是针对高校信息化建设的核心工程,旨在通过物联网技术实现数字化校园的智能化升级。该方案通过融合计算机技术、网络通信技术、数据库技术和IC卡识别技术,初步实现了校园一卡通系统,进而通过人脸识别技术实现了更精准的校园安全管理、生活管理、教务管理和资源管理。 方案包括多个管理系统:智慧校园管理平台、一卡通卡务管理系统、一卡通人脸库管理平台、智能人脸识别消费管理系统、疫情防控管理系统、人脸识别无感识别管理系统、会议签到管理系统、人脸识别通道管理系统和图书馆对接管理系统。这些系统共同构成了智慧校园的信息化基础,通过统一数据库和操作平台,实现了数据共享和信息一致性。 智能人脸识别消费管理系统通过人脸识别终端,在无需接触的情况下快速完成消费支付过程,提升了校园服务效率。疫情防控管理系统利用热成像测温技术、视频智能分析等手段,实现了对校园人员体温监测和疫情信息实时上报,提高了校园公共卫生事件的预防和控制能力。 会议签到管理系统和人脸识别通道管理系统均基于人脸识别技术,实现了会议的快速签到和图书馆等场所的高效通行管理。与图书馆对接管理系统实现了一卡通系统与图书馆管理系统的无缝集成,提升了图书借阅的便捷性。 总体而言,该智慧校园解决方案通过集成的信息化管理系统,提升了校园管理的智能化水平,优化了校园生活体验,增强了校园安全,并提高了教学和科研的效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值