关于phpfindone的信息

华为云服务器特价优惠火热进行中!

2核2G2兆仅需 38 元;4核4G3兆仅需 79 元。购买时间越长越优惠!更多配置及优惠价格请咨询客服。

合作流程:
1、点击链接注册/关联华为云账号:点击跳转
2、添加客服微信号:cloud7591,确定产品方案、价格方案、服务支持方案等;
3、客服协助购买,并拉微信技术服务群,享受一对一免费技术支持服务;
技术专家在金蝶、华为、腾讯原厂有多年工作经验,并已从事云计算服务8年,可对域名、备案、网站搭建、系统部署、AI人工智能、云资源规划等上云常见问题提供更专业靠谱的服务,对相应产品提供更优惠的报价和方案,欢迎咨询。

本篇文章给大家谈谈phpfindone,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

微信号:cloud7591
如需了解更多,欢迎添加客服微信咨询。
复制微信号

本文目录一览:

php查询mdb最新

一.安装部署mongo

1.创建文件夹 

/opt/mongodb/single 

/opt/mongodb/data/db

2.进入single目录下载安装包

//下载 tar.gz文件

wget

3.解压 并修改文件名 

mv mongodb-linux-x86_64-2.4.6 mongo

4.进入mongo目录

5.创建配置文件 

– mkdir conf 

– cd conf 

– vim conf.properties

#端口

port=27017

#db存放的目录

dbpath=/opt/mongotest/data/db

#后台启动需要配置日志输出

logpath=/opt/mongotest/single/mongo/log/mongo.log

#日志模式

logappend=true

#设置成后台启动

fork=true

6.启动mongo 

mongo目录执行

root@chwx2:/opt/mongotest/single/mongo# ./bin/mongod -f conf/conf.properties

about to fork child process, waiting until server is ready for connections.

forked process: 4988

all output going to: /opt/mongotest/single/mongo/log/mongo.log

child process started successfully, parent exiting

表示后台启动mongo成功

二.使用mongo进行日常操作

1.连接mongodb 

mongo/bin目录下执行 

./mongo

2.查看数据库 

show dbs

3.查看当前所在数据库 

db

4.创建数据库 

use openfire (临时创建 如果不做操作 则离开后被系统删除)

5.在当前数据库删除当前数据库 

db.dropDatabase()

6.查看当前库的所有用户 

show users

7.查看集合(或者叫表) 

show collections

8.创建集合 

db.createCollection(“mycollection”)

9.创建集合并制定集合的属性 

db.createCollection(“mycol”, { capped : true, autoIndexID : true, size : 6142800, max : 10000 } )

字段

类型

描述

capped    Boolean    (可选)如果为true,则启用封顶集合。封顶集合是固定大小的集合,会自动覆盖最早的条目,当它达到其最大大小。如果指定true,则需要也指定尺寸参数。  

autoIndexID    Boolean    (可选)如果为true,自动创建索引_id字段的默认值是false。  

size    number    (可选)指定最大大小字节封顶集合。如果封顶如果是 true,那么你还需要指定这个字段。  

max    number    (可选)指定封顶集合允许在文件的最大数量。  

10.另一种创建集合 

(当插入一条数据时,不存在mongodb会帮我们创建,和创建数据库同理) 

db.MySecondCollection.insert({“name” : “ming”})

11.删除当前库的一个集合 

db.CollectionName.drop()

12.插入一条数据 

db.MyFirstCollection.insert({“_id”:”3”,”title”:”mongotest”,”description”:”this is test”}) 

注意:插入的都是JSON形式的,所以一定要用{},否则会报错: 

Sat Mar 19 14:22:39.160 SyntaxError: Unexpected token :

13.插入一条_id存在的数据 

db.MyFirstCollection.insert({“_id”:”3”,”title”:”mm”}) 

输出:E11000 duplicate key error index: openfire.MyFirstCollection.$_id_ dup key: { : “3” } 

解释:_id即是mongodb的默认主键,默认自动生成,我们可以直接设置以达到我们想要的目的

问:插入一条和原来集合完全不一样的数据可以吗?

答:可以,所以我们要在程序中规避,手动指定我们一个集合里面的字段,否则就无法实现查询及其他功能了

db.MyFirstCollection.insert({"newTitle":"null"})

db.MyFirstCollection.find();

{ "_id" : "3", "title" : "new title", "description" : "this is test" }

{ "_id" : ObjectId("56ecf4fe0dceecace97c4506"), "newTitle" : "null" }

14.查看集合第一条记录 

db.MySecondCollection.findOne(); 

输出:{ “_id” : ObjectId(“56ecde0662552d15c443dd4a”), “name” : “ming” }

15.查找一条/多条特定数据 

db.MySecondCollection.findOne({“name”:”ming”}) 

输出:{ “_id” : ObjectId(“56ecde0662552d15c443dd4a”), “name” : “ming” }

16.更新一条记录 

db.MyFirstCollection.update({“title”:”mongotest”},{$set:{“title”:”new title”}},true,false) 

结果: 

db.MyFirstCollection.findOne() 

{ “_id” : “3”, “title” : “new title”, “description” : “this is test” }

update详解

db.collection.update(criteria,objNew,upsert,multi)

criteria:查询条件

objNew:update对象和一些更新操作符

upsert:如果不存在update的记录,是否插入objNew这个新的文档,true为插入,默认为false,不插入。

multi:默认是false,只更新找到的第一条记录。如果为true,把按条件查询出来的记录全部更新。

更新操作符:

1.$inc

用法:{$inc:{field:value}}

作用:对一个数字字段的某个field增加value

示例:db.students.update({name:"student"},{$inc:{age:5}})  

2.$set

用法:{$set:{field:value}}

作用:把文档中某个字段field的值设为value

示例:db.students.update({name:"student"},{$set:{age:23}})

3.$unset

用法:{$unset:{field:1}}

作用:删除某个字段field

示例: db.students.update({name:"student"},{$unset:{age:1}})

4.$push

用法:{$push:{field:value}}

作用:把value追加到field里。注:field只能是数组类型,如果field不存在,会自动插入一个数组类型

示例:db.students.update({name:"student"},{$push:{"title":"major"}}

5.$rename

用法:{$rename:{old_field_name:new_field_name}}

作用:对字段进行重命名(不是值,是字段)

示例:db.students.update({name:"student"},{$rename:{"name":"newname"}})

设置用户权限及访问

1.给admin添加用户

切换到admin库:use admin 

添加admin用户:db.addUser(“root”,”admin”)

注意:必须先给admin库添加用户,否则就算给具体的库添加了用户,后续进入依然能操作具体库. 

因为默认admin库用户具有最高权限,相当于具体库需要认证时,进入的用户持有的是admin的权限,所以无需认证依然能进行操作.

2.给具体库添加用户

use openfire

db.addUser("openfire","password")

3.重启mongo并在启动时配置需要认证

方法一:退出重启并加上auth参数 

./bin/mongod -f conf/conf.properties –auth(注意是两个-)

方法二:修改配置文件,加上参数(推荐) 

auth=true

3.测试权限

use openfire

db.MySecondCollection.findOne();

Sat Mar 19 14:04:55.653 error: {

"$err" : "not authorized for query on openfire.MySecondCollection",

"code" : 16550

} at src/mongo/shell/query.js:128

4.认证并操作

//此处应该设置成更加恰当的用户名及密码

db.auth("openfire","password")

1

db.MySecondCollection.findOne()

{ "_id" : ObjectId("56ecde0662552d15c443dd4a"), "name" : "ming" }

5.另一种方法认证

在进入mongo时候加上数据库及用户名、密码 

./bin/mongo openfire -uopenfire -ppassword

root@test:/opt/mongotest/single/mongo# ./bin/mongo openfire -uopenfire -ppassword

MongoDB shell version: 2.4.6

connecting to: openfire

db

openfire

db.MySecondCollection.findOne()

{ "_id" : ObjectId("56ecde0662552d15c443dd4a"), "name" : "ming" }

mongdb进阶

1.find()指定返回字段 

作用:减少流量

如果key:value,返回的value是个非常大的JSON,而我们不需要这么多字段,也许我们只需要其中的一个.

那么使用projection来过滤: 

db.collection.find(query, projection) 此处projection就是返回值的过滤条件

参数

类型

描述

query    文档    可选. 使用查询操作符指定查询条件  

projection    文档    可选.使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略).  

返回值: 匹配查询条件的文档集合的游标. 如果指定投影参数,查询出的文档返回指定的键 ,”_id”键也可以从集合中移除掉。 

_id不指定的话,总是会返回. 

1或者true代表返回,0或者false代表不返回

示例: 

db.MyFirstCollection.findOne({“title”:”new title”},{“description”:1,”_id”:0}); 

{ “description” : “this is test” }

也可以使用表达式: 

db.MyFirstCollection.findOne({“title”:”new title”},{Items:{“$slice”:[3,1]}});

引用: 

php mongoclient 连接 mongodb ,出现 "No candidate servers found"错误。实在没办法,求大神们解答。

表标PHP已经自带了mongo功能,你就可以操作下面的代码(但是你必须有安装mongodb服务器)一、连接数据库使用下面的代码创建一个数据库链接复制代码代码如下:listDBs());//能打印出数据库数组,看看有几个数据库。?如图:上图说有一个数据库名字叫local,总大小1个字节,他是空的。看见ok表示运行成功。现在你可以使用$connection链接来操作数据库了选择数据库使用下面的代码来选择一个数据库复制代码代码如下:dbname;?这里的数据库并不一定是一个已经存在的数据库,如果所选择的数据库不存在,则会新建一个数据库,所以在选择数据库的时候,注意一定要填上正确的数据库名如果拼写错误的话,很有可能会新建一个数据库复制代码代码如下:mybiglongdbname;//做一些事情$db=$connection-mybiglongdbnme;//现在会连上一个新的数据库?获取一个集合获取一个集合跟选择数据库拥有相同的语法格式复制代码代码如下:baz;//选择数据库$collection=$db-foobar;//选择foobar集合//或者使用更简洁的方式$collection=$connection-baz-foobar;?插入一个文档多维数组是可以被储存到数据库中的基本单元一个随机的文档可能是这样复制代码代码如下:“MongoDB”,“type”=“database”,“count”=1,“info”=(object)array(“x”=203,“y”=102),“versions”=array(“0.9.7″,“0.9.8″,“0.9.9″));?注意:你可以嵌套数组与对象,对象与文档在mongodb中几乎是一样的,你可以使用$doc调用一个文档或对象,但是info字段总是一个对象而不是一个文档,本约束适用于所有文档使用MongoCollection::insert()插入一个文档复制代码代码如下:foo-bar;$collection-insert($doc);?mongodb的insert()、save(),区别主要是:若存在主键,insert()不做操作,而save()则更改原来的内容为新内容。存在数据:{_id:1,"name":"n1"}insert({_id:1,"name":"n2"})会提示错误save({_id:1,"name":"n2"})会把n1改为n2。使用MongoCollection::findOne()查询文档为了证明上面那段代码的数据已经插入到数据库里了,我们进行简单的findOne()操作以得到集合中的第一个文档数据,这种方法只返回一个文档数据,这种方法适用于在你的查询语句的时候只匹配一个文档或者你只关心第一条数据复制代码代码如下:findOne();var_dump($obj);?你会看到下列结果复制代码代码如下:array(5){["_id"]=object(MongoId)#6(0){}["name"]string(7)“MongoDB”["type"]=string(8)“database”["count"]=int(1)["info"]=array(2){["x"]=int(203)["y"]=int(102)}["versions"]array(3){[0]=string(5)“0.9.7″[1]=string(5)“0.9.8″[2]=string(5)“0.9.9″}}注意_id字段自动加载了文档上,MongoDB储存元素中以_以及$开头的都是供内部使用的添加文档为了做一些更有趣的事情,我们添加简单的文档到集合中,这些文档如下复制代码代码如下:value);?我们可以使用循环相当有效的插入数据复制代码代码如下:insert(array(“i”=$i));}?注意:我们可以插入不同的字段在同一字符集中,在这方面意味着MongoDB拥有非常自由的储存模式在一个集合中计算文档的数量现在我们插入了101个文档(我们用循环插入了100个,之前还插入了一个),我们可以使用count()来看看我们的数据是不是都被插入进去了复制代码代码如下:count();?这段代码将打印出101MongoCollection::count()也可以查询字段数据使用游标得到集合中的所有文档为了得到集合中的所有文档,我们可以使用MongoCollection::find()方法,find()方法返回一个MongoCursor对象,可以让我们重复得到查询所匹配的的文档复制代码代码如下:find();foreach($cursoras$id=$value){echo“$id:“;var_dump($value);}?这样我们会打印出集合中的这101个文档,$id就是文档中的_id字段,$value就是文档本身为查询规定一个标准我们可以通过find()方法得到集合中的文档子集,例如,我们要查询出集合中i字段为71的文档,我们可以使用下列方法复制代码代码如下:71);$cursor=$collection-find($query);while($cursor-hasNext()){var_dump($cursor-getNext());}?我们将打印如下数据复制代码代码如下:array(2){["_id"]=object(MongoId)#6(0){}["i"]=int(71)["_ns"]=“testCollection”}为查询设定一个范围我们可以通过find()创建一个查询语句以得集合中的一个子集,例如如果我们得到所有”i”50的文档,我们可以使用如下代码复制代码代码如下:array(‘$gt'=50));//注意'$gt'两边的单引号$cursor=$coll-find($query);while($cursor-hasNext()){var_dump($cursor-getNext());}?我们同样可以得到20array(“\$gt”=20,“\$lte”=30));$cursor=$coll-find($query);while($cursor-hasNext()){var_dump($cursor-getNext());}?我们非常容易漏掉$美元符号,你也可以选择你自定义的符号来代替美元符号,选择一个不会在你的建里面出现的符号例如”:”,在php.ini中加上这么一句话复制代码代码如下:mongo.cmd=“:”那么上面的代码就可以替换成复制代码代码如下:array(“:gt”=20,“:lte”=30));?当然你也可以使用ini_set(“mongo.cmd”,“:”)的方法来改变创建一个索引MongoDB支持索引,并且可以很容易的加到一个集合中,你只要指定某个字段为索引就行了,并且还可以指定正序索引(1)与倒序索引(-1)下面的代码为I创建了索引复制代码代码如下:ensureIndex(array(“i”=1));//在”i”上创建了一个索引$coll-ensureIndex(array(“i”=-1,“j”=1));//在”i”上创建了倒序索引在”j”上创建了正序索引?一个完整的简单例子这个例子展示了如何链接mongodb数据库,如何选择数据库,如何插入数据,如何查询数据,以及关闭数据库链接复制代码代码如下:comedy;$collection=$db-cartoons;//添加一个元素$obj=array("title"="CalvinandHobbes","author"="BillWatterson");$collection-insert($obj);//修改$newdata=array('$set'=array("title"="CalvinandHobbes"));$collection-update(array("author"="caleng"),$newdata);//删除$collection-remove(array('author'='caleng'),array("justOne"=true));//添加另一个元素,使用不同的格式$obj=array("title"="XKCD","online"=true);$collection-insert($obj);//查询所有的集合$cursor=$collection-find();//重复显示结果foreach($cursoras$obj){echo$obj["title"]."\n";}//关闭链接$m-close();?输出结果为复制代码代码如下:CalvinandHobbesXKCD

php mongo条件有and和or时应该怎样写

mongo操作

find方法

db.collection_name.find();

查询所有的结果:

select * from users;

db.users.find();

指定返回那些列(键):

select name, skills from users;

db.users.find({}, {'name' : 1, 'skills' : 1});

补充说明: 第一个{} 放where条件 第二个{} 指定那些列显示和不显示 (0表示不显示 1表示显示)

where条件:

1.简单的等于:

select name, age, skills from users where name = 'hurry';

db.users.find({'name' : 'hurry'},{'name' : 1, 'age' : 1, 'skills' : 1});

2.使用and

select name, age, skills from users where name = 'hurry' and age = 18;

db.users.find({'name' : 'hurry', 'age' : 18},{'name' : 1, 'age' : 1, 'skills' : 1});

3.使用or

select name, age, skills from users where name = 'hurry' or age = 18;

db.users.find({ '$or' : [{'name' : 'hurry'}, {'age' : 18}] },{'name' : 1, 'age' : 1, 'skills' : 1});

4., =, , = ($lt, $lte, $gt, $gte )

select * from users where age = 20 and age = 30;

db.users.find({'age' : {'$gte' : 20, '$lte' : 30}});

5.使用in, not in ($in, $nin)

select * from users where age in (10, 22, 26);

db.users.find({'age' : {'$in' : [10, 22, 26]}});

6.匹配null

select * from users where age is null;

db.users.find({'age' : null);

7.like (mongoDB 支持正则表达式)

select * from users where name like "%hurry%";

db.users.find({name:/hurry/});

select * from users where name like "hurry%";

db.users.find({name:/^hurry/});

8.使用distinct

select distinct (name) from users;

db.users.distinct('name');

9.使用count

select count(*) from users;

db.users.count();

10.数组查询 (mongoDB自己特有的)

如果skills是 ['java','python']

db.users.find({'skills' : 'java'}); 该语句可以匹配成功

$all

db.users.find({'skills' : {'$all' : ['java','python']}}) skills中必须同时包含java 和 python

$size

db.users.find({'skills' : {'$size' : 2}}) 遗憾的是$size不能与$lt等组合使用

$slice

db.users.find({'skills' : {'$slice : [1,1]}})

两个参数分别是偏移量和返回的数量

11.查询内嵌文档

12.强大的$where查询

db.foo.find();

{ "_id" : ObjectId("4e17ce0ac39f1afe0ba78ce4"), "a" : 1, "b" : 3, "c" : 10 }

{ "_id" : ObjectId("4e17ce13c39f1afe0ba78ce5"), "a" : 1, "b" : 6, "c" : 6 }

如果要查询 b = c 的文档怎么办?

db.foo.find({"$where":function(){

for(var current in this){

for(var other in this){

if(current != other this[current] == this[other]){

return true;

}

}

}

return false;

}});

{ "_id" : ObjectId("4e17ce13c39f1afe0ba78ce5"), "a" : 1, "b" : 6, "c" : 6 }

mongo php 操作 怎样更新一条数据

PHP操作MongoDB数据库的简单示例。

Mongodb的常用操作

参看手册,php官方的

也可以参看mongodb官方的教程。

一, Mognodb数据库连接

1)、默认格式

 

复制代码 代码示例:

$m = new Mongo();

//这里采用默认连接本机的27017端口,当然也可以连接远程主机如  192.168.0.4:27017,如果端口是27017,端口可以省略。

2)、标准连接

$m = new Mongo(“mongodb://${username}:${password}@localhost”);

实例:

复制代码 代码示例:

$m = new Mongo(“mongodb://127.0.0.1:27017/admin:admin”);

 

数据库的用户名和密码都是admin

数据库操作:

1)、插入数据:

 

复制代码 代码示例:

?php

//这里采用默认连接本机的27017端口,当然你也可以连接远程主机如192.168.0.4:27017

//如果端口是27017,端口可以省略

$m = new Mongo("mongodb://127.0.0.1:27017/admin:admin");

//选择comedy数据库,如果以前没该数据库会自动创建,也可以用$m-selectDB("comedy");

$db = $m-comedy;

//选择comedy里面的collection集合,相当于RDBMS里面的表,也可以使用

$collection = $db-collection;

$db-selectCollection("collection");

/*********添加一个元素**************/

$obj = array("title" = "php1", "author" = "Bill Watterson");

//将$obj 添加到$collection 集合中

$collection-insert($obj);

/*********添加另一个元素**************/

$obj = array("title" = "huaibei", "online" = true);

$collection-insert($obj);

//$query = array("title" = "huaibei");

$query = array( "_id" = $obj['_id'] );

$cursor = $collection-find($query);

//遍历所有集合中的文档

foreach ($cursor as $obj) {

   echo $obj["title"] . "\n";

   echo $obj["_id"] . "\n";

}

//断开MongoDB连接

$m-close();

2)、带条件的查询

查询 title为huaibei的字段

1 $query = array( ”title” = ”huaibei” );

2 $cursor = $collection-find( $query );      // 在$collectio集合中查找满足$query的文档

常用的SQL转化为mongodb的条件

 

复制代码 代码示例:

mysql: id = 123

mongo: array(‘id’=123)

mysql: name link ’%bar%’

mongo: array(‘name’ = new MongoRegex(‘/.*bar.*/i’))

mysql: where id  10

mongo: array(‘id’ = array(‘$gt’ = 10))

mysql: where id = 10

mongo: array(‘id’ = array(‘$gte’ = 10))

mysql: where id  10

mongo: array(‘id’ = array(‘$lt’ = 10))

mysql: where id = 10

mongo: array(‘id’ = array(‘$lte’ = 10))

mysql: where id  1 and id  10

mongo: array(‘id’ = array(‘$gt’ = 1,’$lt’ = 10))

mysql: where id  10

mongo: array(‘id’ = array(‘$ne’ = 10))

mysql: where id in(123)

mongo: array(‘id’ = array(‘$in’ = array(1,2,3)))

mysql: where id not in(123)

mongo: array(‘id’ = array(‘$nin’ = array(1,2,3)))

mysql: where id = 2 or id = 9

mongo: array(‘id’ = array(‘$or’ = array(array(‘id’=2),array(‘id’=9))))

mysql: order by name asc

mongo: array(‘sort’=array(‘name’=1))

mysql: order by name desc

mongo: array(‘sort’=array(‘name’=-1))

mysql: limit 0,2

mongo: array(‘limit’=array(‘offset’=0,’rows’=2))

mysql: select name,email

mongo: array(‘name’,'email’)

mysql: select count(name)

mongo: array(‘COUNT’) //注意:COUNT为大写

 

更详细的转换参考

注意事项:

查询时,每个Object插入时都会自动生成一个独特的_id,它相当于RDBMS中的主键,用于查询时非常方便 (_id每一都不同,很像自动增加的id)

例如:

 

复制代码 代码示例:

?php

$param = array("name" = "joe");

$collection-insert($param);

$joe = $collection-findOne(array("_id" = $param['_id']));

print_R($joe);

$m-close();

 

返回结果:Array ( [_id] = MongoId Object ( [$id] = 4fd30e21870da83416000002 ) [name] = joe )

更改字段值:

 

复制代码 代码示例:

?php

$sign = array("title" = 'php1');

$param = array("title" = 'php1','author'='test');

$joe = $collection-update($sign, $param);

删除一个数据库:

 

复制代码 代码示例:

$m - dropDB(“comedy”);

列出所有可用数据库:

 

复制代码 代码示例:

$m-listDBs();   //无返回值

附,mongodb常用的数据库方法

MongoDB中有用的函数:

创建一个MongoDB对象

 

复制代码 代码示例:

?php

$mo = new Mongo();

$db = new MongoDB($mo,’dbname’);//通过创建方式获得一个MongoDB对象

删除当前DB

 

复制代码 代码示例:

?php

$db = $mo-dbname;

$db-drop();

获得当前数据库名

 

复制代码 代码示例:

?php

$db = $mo-dbname;

$db-_tostring();

选择想要的collection:

 

复制代码 代码示例:

A:

$mo = new Mongo();

$coll = $mo-dbname-collname;//获得一个collection对象

B:

$db = $mo-selectDB(’dbname’);

$coll = $db-collname;

C:

$db = $mo-dbname;

$coll = $db-collname;

D:

$db = $mo-dbname;

$coll = $db-selectCollectoin(’collname’);//获得一个collection对象

插入数据(MongoCollection对象):

MongoCollection::insert(array $a,array $options)

array $a 要插入的数组

array $options 选项

safe 是否返回操作结果信息

fsync 是否直接插入到物理硬盘

例子:

 

复制代码 代码示例:

$coll = $mo-db-foo;

$a = array(’a’=’b’);

$options = array(’safe’=true);

$rs  =$coll-insert($a,$options);

 

$rs为一个array型的数组,包含操作信息

删除数据库中的记录(MongoCollection对象):

MongoCollection::remove(array $criteria,array $options)

array $criteria  条件

array $options 选项

safe 是否返回操作结果

fsync 是否是直接影响到物理硬盘

justOne 是否只影响一条记录

例子:

 

复制代码 代码示例:

$coll = $mo-db-coll;

$c = array(’a’=1,’s’=array(’$lt’=100));

$options = array(’safe’=true);

$rs = $coll-remove($c,$options);

 

$rs为一个array型的数组,包含操作信息

更新数据库中的记录(MongoCollection对象):

MongoCollection::update(array $criceria,array $newobj,array $options)

array $criteria  条件

array $newobj 要更新的内容

array $options 选项

safe 是否返回操作结果

fsync 是否是直接影响到物理硬盘

upsert 是否没有匹配数据就添加一条新的

multiple 是否影响所有符合条件的记录,默认只影响一条

例子:

 

复制代码 代码示例:

$coll = $mo-db-coll;

$c = array(’a’=1,’s’=array(’$lt’=100));

$newobj = array(’e’=’f’,’x’=’y’);

$options = array(’safe’=true,’multiple’=true);

$rs = $coll-remove($c,$newobj,$options);

 

$rs为一个array型的数组,包含操作信息

查询collection获得单条记录(MongoCollection类):

array MongoCollection::findOne(array $query,array $fields)

array $query 条件

array $fields 要获得的字段

例子:

 

复制代码 代码示例:

$coll = $mo-db-coll;

$query = array(’s’=array(’$lt’=100));

$fields = array(’a’=true,’b’=true);

$rs = $coll-findOne($query,$fields);

 

如果有结果就返回一个array,如果没有结果就返回NULL

查询collection获得多条记录(MongoCollection类):

MongoCursor MongoCollection::find(array $query,array $fields)

array $query 条件

array $fields 要获得的字段

例子:

 

复制代码 代码示例:

$coll = $mo-db-coll;

$query = array(’s’=array(’$lt’=100));

$fields = array(’a’=true,’b’=true);

$cursor = $coll-find($query,$fields);

//排序

$cursor-sort(array(‘字段’=-1));(-1倒序,1正序)

//跳过部分记录

$cursor-skip(100);跳过100行

//只显示部分记录

$cursor-limit(100);只显示100行

返回一个游标记录对象MongoCursor。

针对游标对象MongoCursor的操作(MongoCursor类):

循环或结果记录:

 

复制代码 代码示例:

$cursor = $coll-find($query,$fields);

while($cursor-hasNext()){

$r = $cursor-getNext();

var_dump($r);

}

或者

$cursor = $coll-find($query,$fields);

foreache($cursor as $k=$v){

var_dump($v);

}

或者

$cursor = $coll-find($query,$fields);

$array= iterator_to_array($cursor);

mongodb 请问php中的这句mysql语法,在mongodb中如何写。

查询:

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})

如果你想在MySQL里添加一个字段,你必须:

ALTER TABLE user….

但在MongoDB里你只需要:

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}})

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})

发现很多人在搜MongoDB循环插入数据,下面把MongoDB循环插入数据的方法添加在下面:

for(var i=0;i100;i++)db.test.insert({uid:i,uname:'nosqlfan'+i});

上面一次性插入一百条数据,大概结构如下:

{ “_id” : ObjectId(“4c876e519e86023a30dde6b8″), “uid” : 55, “uname” : “nosqlfan55″ }

{ “_id” : ObjectId(“4c876e519e86023a30dde6b9″), “uid” : 56, “uname” : “nosqlfan56″ }

{ “_id” : ObjectId(“4c876e519e86023a30dde6ba”), “uid” : 57, “uname” : “nosqlfan57″ }

{ “_id” : ObjectId(“4c876e519e86023a30dde6bb”), “uid” : 58, “uname” : “nosqlfan58″ }

{ “_id” : ObjectId(“4c876e519e86023a30dde6bc”), “uid” : 59, “uname” : “nosqlfan59″ }

{ “_id” : ObjectId(“4c876e519e86023a30dde6bd”), “uid” : 60, “uname” : “nosqlfan60″ }

简易对照表

SQL Statement Mongo Query Language Statement

CREATE TABLE USERS (a Number, b Number) implicit; can be done explicitly

INSERT INTO USERS VALUES(1,1) db.users.insert({a:1,b:1})

SELECT a,b FROM users db.users.find({}, {a:1,b:1})

SELECT * FROM users db.users.find()

SELECT * FROM users WHERE age=33 db.users.find({age:33})

SELECT a,b FROM users WHERE age=33 db.users.find({age:33}, {a:1,b:1})

SELECT * FROM users WHERE age=33 ORDER BY name db.users.find({age:33}).sort({name:1})

SELECT * FROM users WHERE age33 db.users.find({'age':{$gt:33}})})

SELECT * FROM users WHERE age33 db.users.find({'age':{$lt:33}})})

SELECT * FROM users WHERE name LIKE "%Joe%" db.users.find({name:/Joe/})

SELECT * FROM users WHERE name LIKE "Joe%" db.users.find({name:/^Joe/})

SELECT * FROM users WHERE age33 AND age=40 db.users.find({'age':{$gt:33,$lte:40}})})

SELECT * FROM users ORDER BY name DESC db.users.find().sort({name:-1})

CREATE INDEX myindexname ON users(name) db.users.ensureIndex({name:1})

CREATE INDEX myindexname ON users(name,ts DESC) db.users.ensureIndex({name:1,ts:-1})

SELECT * FROM users WHERE a=1 and b='q' db.users.find({a:1,b:'q'})

SELECT * FROM users LIMIT 10 SKIP 20 db.users.find().limit(10).skip(20)

SELECT * FROM users WHERE a=1 or b=2 db.users.find( { $or : [ { a : 1 } , { b : 2 } ] } )

SELECT * FROM users LIMIT 1 db.users.findOne()

EXPLAIN SELECT * FROM users WHERE z=3 db.users.find({z:3}).explain()

SELECT DISTINCT last_name FROM users db.users.distinct('last_name')

SELECT COUNT(*y) FROM users db.users.count()

SELECT COUNT(*y) FROM users where AGE 30 db.users.find({age: {'$gt': 30}}).count()

SELECT COUNT(AGE) from users db.users.find({age: {'$exists': true}}).count()

UPDATE users SET a=1 WHERE b='q' db.users.update({b:'q'}, {$set:{a:1}}, false, true)

UPDATE users SET a=a+2 WHERE b='q' db.users.update({b:'q'}, {$inc:{a:2}}, false, true)

DELETE FROM users WHERE z="abc" db.users.remove({z:'abc'});

###################################################

一、操作符

操作符相信大家肯定都知道了,就是等于、大于、小于、不等于、大于等于、小于等于,但是在mongodb里不能直接使用这些操作符。在mongodb里的操作符是这样表示的:

(1) $gt (大于) 

(2) $lt (小于) 

(3) $gte= (大于等于)

(4) $lt= (小于等于)

(5) $ne!= (不等于) 

(6) $inin (包含)

(7) $ninnot in (不包含)

(8) $existsexist (字段是否存在) 

(9) $inc对一个数字字段field增加value

(10) $set就是相当于sql的set field = value

(11) $unset就是删除字段

(12) $push把value追加到field里面去,field一定要是数组类型才行,如果field不存在,会新增一个数组类型加进去

(13) $pushAll同$push,只是一次可以追加多个值到一个数组字段内

(14) $addToSet增加一个值到数组内,而且只有当这个值不在数组内才增加。

(15) $pop删除最后一个值:{ $pop : { field : 1 } }删除第一个值:{ $pop : { field : -1 } }注意,只能删除一个值,也就是说只能用1或-1,而不能用2或-2来删除两条。mongodb 1.1及以后的版本才可以用

(16) $pull从数组field内删除一个等于value值

(17) $pullAll同$pull,可以一次删除数组内的多个值

(18) $ 操作符是他自己的意思,代表按条件找出的数组里面某项他自己。这个比较坳口,就不说了。

二、CURD 增、改、读、删

增加

复制代码代码如下:

db.collection-insert({'name' = 'caleng', 'email' = 'admin#admin.com'});

是不是灰常简单呀,对就是这么简单,它没有字段的限制,你可以随意起名,并插入数据

复制代码代码如下:

db.collection.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } ); 只更新了第一条大于1记录

db.collection.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true ); 大于3的记录 全更新了

db.collection.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false ); 大于4的记录 只加进去了第一条

db.collection.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true ); 大于5的记录 全加进去

查询

复制代码代码如下:

db.collection.find(array('name' = 'bailing'), array('email'='email@qq.com'))

db.collection.findOne(array('name' = 'bailing'), array('email''email@qq.com'))

大家可以看到查询我用了两种不同的写法,这是为什么,其实这跟做菜是一样的,放不同的调料,炒出的菜是不同的味道。下面给大家说一下,这两种调料的不同作用。

findOne()只返回一个文档对象,find()返回一个集合列表。

也就是说比如,我们只想查某一条特定数据的详细信息的话,我们就可以用findOne();

如果想查询某一组信息,比如说一个新闻列表的时候,我们就可以作用find();

那么我想大家这时一定会想到我想对这一个列表排序呢,no problem mongodb会为您全心全意服务

复制代码代码如下:

db.collection.find().sort({age:1}); //按照age正序排列

db.collection.find().sort({age:-1}); //按照age倒序排列

db.collection.count(); //得到数据总数

db.collection.limit(1); //取数据的开始位置

db.collection.skip(10); //取数据的结束位置

//这样我们就实现了一个取10条数据,并排序的操作。

删除

删除有两个操作 remove()和drop()

复制代码代码如下:

db.collection.remove({"name",'jerry'}) //删除特定数据

db.collection.drop() //删除集合内的所有数据

distinct操作

复制代码代码如下:

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

2. 熟悉MongoDB的数据操作语句,类sql

数据库操作语法

mongo --path

db.AddUser(username,password) 添加用户

db.auth(usrename,password) 设置数据库连接验证

db.cloneDataBase(fromhost) 从目标服务器克隆一个数据库

db.commandHelp(name) returns the help for the command

db.copyDatabase(fromdb,todb,fromhost) 复制数据库fromdb---源数据库名称,todb---目标数据库名称,fromhost---源数据库服务器地址

db.createCollection(name,{size:3333,capped:333,max:88888}) 创建一个数据集,相当于一个表

db.currentOp() 取消当前库的当前操作

db.dropDataBase() 删除当前数据库

db.eval(func,args) run code server-side

db.getCollection(cname) 取得一个数据集合,同用法:db['cname'] or db.cname

db.getCollenctionNames() 取得所有数据集合的名称列表

db.getLastError() 返回最后一个错误的提示消息

db.getLastErrorObj() 返回最后一个错误的对象

db.getMongo() 取得当前服务器的连接对象get the server connection object

db.getMondo().setSlaveOk() allow this connection to read from then nonmaster membr of a replica pair

db.getName() 返回当操作数据库的名称

db.getPrevError() 返回上一个错误对象

db.getProfilingLevel() ?什么等级

db.getReplicationInfo() ?什么信息

db.getSisterDB(name) get the db at the same server as this onew

db.killOp() 停止(杀死)在当前库的当前操作

db.printCollectionStats() 返回当前库的数据集状态

db.printReplicationInfo()

db.printSlaveReplicationInfo()

db.printShardingStatus() 返回当前数据库是否为共享数据库

db.removeUser(username) 删除用户

db.repairDatabase() 修复当前数据库

db.resetError()

db.runCommand(cmdObj) run a database command. if cmdObj is a string, turns it into {cmdObj:1}

db.setProfilingLevel(level) 0=off,1=slow,2=all

db.shutdownServer() 关闭当前服务程序

db.version() 返回当前程序的版本信息

数据集(表)操作语法

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,optional params)

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() 验证此数据集

db.linlin.getShardVersion() 返回数据集共享版本号

mongodb 3.2怎么在php中连接

表标PHP已经自带了mongo功能,你就可以操作下面的代码(但是你必须有安装mongodb服务器)

一、连接数据库

使用下面的代码创建一个数据库链接

复制代码 代码如下:

?php

$connection = new Mongo(mongodb://192.168.1.5:27017); //链接到 192.168.1.5:27017//27017端口是默认的。

$connection = new Mongo( "example.com" ); //链接到远程主机(默认端口)

$connection = new Mongo( "example.com:65432" ); //链接到远程主机的自定义的端口

print_r($connection-listDBs());//能打印出数据库数组,看看有几个数据库。

?

如图:

上图说有一个数据库名字叫local,总大小1个字节,他是空的。看见ok表示运行成功。

现在你可以使用$connection链接来操作数据库了

选择数据库

使用下面的代码来选择一个数据库

复制代码 代码如下:

?php

$db = $connection-dbname;

?

这里的数据库并不一定是一个已经存在的数据库,如果所选择的数据库不存在,则会新建一个数据库,所以在选择数据库的时候,注意一定要填上正确的数据库名

如果拼写错误的话,很有可能会新建一个数据库

复制代码 代码如下:

?php

$db = $connection-mybiglongdbname;

//做一些事情

$db = $connection-mybiglongdbnme;

//现在会连上一个新的数据库

?

获取一个集合

获取一个集合跟选择数据库拥有相同的语法格式

复制代码 代码如下:

?php

$db = $connection-baz;//选择数据库

$collection = $db-foobar;//选择foobar集合

//或者使用更简洁的方式

$collection = $connection-baz-foobar;

?

插入一个文档

多维数组是可以被储存到数据库中的基本单元

一个随机的文档可能是这样

复制代码 代码如下:

?php

$doc = array(

”name” = “MongoDB”,

“type” = “database”,

“count” = 1,

“info” = (object)array( “x” = 203,

“y” = 102),

“versions” = array(“0.9.7″, “0.9.8″, “0.9.9″)

);

?

注意:你可以嵌套数组与对象,对象与文档在mongodb中几乎是一样的,你可以使用$doc调用一个文档或对象,但是info字段总是一个对象而不是一个文档,

本约束适用于所有文档

使用MongoCollection::insert()插入一个文档

复制代码 代码如下:

?php

$m = new Mongo();

$collection = $m-foo-bar;

$collection-insert($doc);

?

mongodb 的 insert()、save() ,区别主要是:若存在主键,insert() 不做操作,而save() 则更改原来的内容为新内容。

存在数据: { _id : 1, " name " : " n1 " }

insert({ _id : 1, " name " : " n2 " }) 会提示错误

save({ _id : 1, " name " : " n2 " }) 会把 n1 改为 n2 。

使用MongoCollection::findOne()查询文档

为了证明上面那段代码的数据已经插入到数据库里了,我们进行简单的 findOne()操作以得到集合中的第一个文档数据,这种方法只返回一个文档数据,

这种方法适用于在你的查询语句的时候只匹配一个文档或者你只关心第一条数据

复制代码 代码如下:

?php

$obj = $collection-findOne();

var_dump( $obj );

?

你会看到下列结果

复制代码 代码如下:

array(5) {

["_id"]=

object(MongoId)#6 (0) {

}

["name"]

string(7) “MongoDB”

["type"]=

string(8) “database”

["count"]=

int(1)

["info"]=

array (2) {

["x"]=

int(203)

["y"]=

int(102)

}

["versions"]

array(3) {

[0]=

string(5) “0.9.7″

[1]=

string(5) “0.9.8″

[2]=

string(5) “0.9.9″

}

}

注意_id字段自动加载了文档上,MongoDB储存元素中以_以及$开头的都是供内部使用的

添加更多文档

为了做一些更有趣的事情,我们添加更多简单的文档到集合中,这些文档如下

复制代码 代码如下:

?php

array( “i” = value );

?

我们可以使用循环相当有效的插入数据

复制代码 代码如下:

?php

for($i=0; $i100; $i++) {

$collection-insert( array( “i” = $i ) );

}

?

注意:我们可以插入不同的字段在同一字符集中,在这方面意味着MongoDB拥有非常自由的储存模式

在一个集合中计算文档的数量

现在我们插入了101个文档(我们用循环插入了100个,之前还插入了一个),我们可以使用count()来看看我们的数据是不是都被插入进去了

复制代码 代码如下:

?php

echo $collection-count();

?

这段代码将打印出101

MongoCollection::count() 也可以查询字段数据

使用游标得到集合中的所有文档

为了得到集合中的所有文档,我们可以使用 MongoCollection::find()方法,find()方法返回一个 MongoCursor对象,可以让我们重复得到查询所匹配的的文档

复制代码 代码如下:

?php

$cursor = $collection-find();

foreach ($cursor as $id = $value) {

echo “$id: “;

var_dump( $value );

}

?

这样我们会打印出集合中的这101个文档,$id就是文档中的_id字段,$value 就是文档本身

为查询规定一个标准

我们可以通过find()方法得到集合中的文档子集,例如,我们要查询出集合中i字段为71的文档,我们可以使用下列方法

复制代码 代码如下:

?php

$query = array( “i” = 71 );

$cursor = $collection-find( $query );

while( $cursor-hasNext() ) {

var_dump( $cursor-getNext() );

}

?

我们将打印如下数据

复制代码 代码如下:

array(2) {

["_id"]=

object(MongoId)#6 (0) {

}

["i"]=

int(71)

["_ns"]=

“testCollection”

}

为查询设定一个范围

我们可以通过find()创建一个查询语句以得集合中的一个子集,例如如果我们得到所有”i”50的文档,我们可以使用如下代码

复制代码 代码如下:

?php

$query = array( “i” = array(‘$gt' =50)); //注意'$gt'两边的单引号

$cursor = $coll-find( $query );

while( $cursor-hasNext() ) {

var_dump( $cursor-getNext() );

}

?

我们同样可以得到20 i = 30之间的数据

复制代码 代码如下:

?php

$query = array( “i” = array( “\$gt” = 20, “\$lte” = 30 ) );

$cursor = $coll-find( $query );

while( $cursor-hasNext() ) {

var_dump( $cursor-getNext() );

}

?

我们非常容易漏掉$美元符号,你也可以选择你自定义的符号来代替美元符号,选择一个不会在你的建里面出现的符号例如”:”,在php.ini中加上这么一句话

复制代码 代码如下:

mongo.cmd = “:”

那么上面的代码就可以替换成

复制代码 代码如下:

?php

$query = array( “i” = array( “:gt” = 20, “:lte” = 30 ) );

?

当然你也可以使用ini_set(“mongo.cmd”, “:”)的方法来改变

创建一个索引

MongoDB支持索引,并且可以很容易的加到一个集合中,你只要指定某个字段为索引就行了,并且还可以指定 正序索引(1)与 倒序索引(-1)

下面的代码为I创建了索引

复制代码 代码如下:

?php

$coll-ensureIndex( array( “i” = 1 ) ); //在”i”上创建了一个索引

$coll-ensureIndex( array( “i” = -1, “j” = 1 ) );//在”i”上创建了倒序索引 在”j”上创建了正序索引

?

一个完整的简单例子

这个例子展示了如何链接mongodb数据库,如何选择数据库,如何插入数据,如何查询数据,以及关闭数据库链接

复制代码 代码如下:

?php

//链接

$m = new Mongo();

// 选择一个数据库

$db = $m-comedy;

$collection = $db-cartoons;

//添加一个元素

$obj = array( "title" = "Calvin and Hobbes", "author" = "Bill Watterson" );

$collection-insert($obj);

//修改

$newdata = array('$set' = array("title" = "Calvin and Hobbes"));

$collection-update(array("author" = "caleng"), $newdata);

//删除

$collection-remove(array('author'='caleng'), array("justOne" = true));

//添加另一个元素,使用不同的格式

$obj = array( "title" = "XKCD", "online" = true );

$collection-insert($obj);

//查询所有的集合

$cursor = $collection-find();

//重复显示结果

foreach ($cursor as $obj) {

echo $obj["title"] . "\n";

}

// 关闭链接

$m-close();

?

输出结果为

复制代码 代码如下:

Calvin and Hobbes

XKCD

phpfindone的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、phpfindone的信息别忘了在本站进行查找喔。

发布于 2023-04-10 04:04:36
收藏
分享
海报
34
目录

    忘记密码?

    图形验证码

    复制成功
    微信号: cloud7591
    如需了解更多,欢迎添加客服微信咨询。
    我知道了