您的位置:首页 > 数据库 > Mongodb

mongodb---第一天

2016-02-01 17:00 411 查看
刚才已经完成了mongodb的安装了,接下来就开始学习mongodb了!!

什么是MongoDB?

MongoDB是一个基于分布式文件存储的数据库,由C++语言编写,最开始知道这个数据库还是室友和我说他们公司正在用,据现在我所了解的MongoDB就是一个文档型数据库,Key-Value存储格式。传说中的NoSql数据库。

Document和BSON

MongoDB中保存的数据格式为BSON,如:
{
name : "sue",
age : 26,
status : "A",
group : [ "news" , "sports" ]
}
怎么觉得有点儿像JSON,怪不得叫BSON。这样的一条记录在MongoDB中被称为文档(Document),对应关系型数据库中的行。
BSON的优点是灵活性高,但它的缺点是空间利用率不是很理想,BSON有三个特点:轻量性,可遍历性,高效性。

又开始来事儿了,好吧!等有时间继续学习,stay hungry,stay foolish!

学习MongoDB的语句首先需要了解几个概念



document:文档数据,在我看来这就相当于mysql中一张表中的一条数据
collection:集合,在我看来相当于mysql中的表

MongoDB操作:

插入文档,也就是插入一条记录。

db.users.insert(user);
比如我想像person集合中添加上我自己的信息,我就可以这么写:
db.person.insert( { name : "张健平" , age : 24 } )
如果我想要看看这个集合中都有哪些数据得话,可以使用:
db.person.find()
如果想要查看当前数据库中的集合列表,也就是查看数据库中的表,可以使用:
show collections



批量插入文档。

语法如下:
db.person.insert( [ { nme : "张健平" } , { name : "张健平1" } ] )
文档的批插入非常方便,但使用批量插入需要注意一些问题,因为BSON格式的限制,一次插入的数据量不能超过16M,所以MongoDB不能保证完全成功。

插叙文档。

因为在学习的过程中出现了我不知道得符号,所以百度了一下放在这里,查询操作符:
$gt , $gte , $lt , $lte  对应的分别是 > , >= , < , <=
例如查询user集合中age为16-18岁之间的(包含16但不含18)
db.user.find( { age : { $gte : 16 , $lt : 18 } } )
$ne代表不等于
语法如下:
db.collection.find(criteria , projection)
criteria:查询条件,文档类型,可选
projection:返回的字段,文档类型,可选,如需返回所有字段,则忽略这个参数



Update命令

语法如下:
db.collection.update(query , update , { upsert : boolean , multi : boolean })
query:查询条件,文档,和find中的查询条件写法一致
update:修改内容,文档
upsert(可选):如果值为true,那么当集合中没有匹配文档时,创建文档,默认false
multi(可选):如果值为true,那么将更新全部符合条件的文档,否则仅更新一个文档,默认false



save命令

语法如下:
db.collection.save(document)
目前没法先和insert有什么区别,百度了一下发现:
一:使用save函数,如果原来的对象不存在,insert和save都可以向collection中插入文档,如果已经存在,save会调用update更新里面的记录,而insert则会忽略操作
二:insert可以一次性插入一个列表,而不用遍历,效率高。save则需要遍历,一个个的插入。

remove命令

需要删除文档的时候使用remove命令,删除文档可以清理掉不需要的数据,释放存储空间,提升检索效率,但错误的删除将会是一场灾难,因此在执行remove操作的时候需要非常的谨慎。
语法如下:
db.collection.remove(
query,
justOne
)
query:BSON类型,删除文档的条件
justOne:布尔类型,true:只删除一个文档,false:默认值,删除所有符合条件的文档
下面是MongoDB和传统SQL比较--删除文档



这些都是MongoDB中的基本操作。接下来会详细学习MongoDB中的查询操作。

MongoDB查询操作

相等条件

相等条件是最常用的查询操作。
如查询inventory集合中所有type字段为snacks的文档。
db.inventory.find( { type : "snacks" } )

比较条件

比较条件也是最基本的查询条件之一,通过运算符的比较运算来筛选或排除文档,从而获取我们想要的文档数据。
大于($gt)、大于等于($gte)、小于($lt)、小于等于($lte)、不等于($ne)、包含于($in)、不包含于($nin)
数值型的字段可以通过使用$gt,$gte,$lt,$lte,$ne等运算符来比较,数组条件可以使用$in,$nin来实现
如查询person集合中所有年龄大于40岁的记录
db.person.find({ age : { $gt : 40 } })

数组条件

当字段包含数组,可以进行数组的完全匹配或特定值的匹配。
单个元素匹配只需要传入元素的值即可,完全匹配需要传入一个数组,特定元素匹配需要“字段.索引”形式传入参数
数组完全匹配:
db.inventory.find( { tags : [ 'fruit' , 'food' , 'citrus' ] } )
单个元素匹配:
db.inventory.find( { tags : 'fruit' } )
特定元素匹配:
db.inventory.find( { 'tags.0' : 'fruit'} )

子文档条件



比如我想要查询level为5的文档
db.inventory.find( { "access.level" : 5 } )

复合查询--AND

当查询条件为多个字段的时候,需要使用多字段复合条件查询。
例如:查询inventory集合中type字段为food并且价格低于95的所有文档。
db.inventory.find( { $and : [ { type : "food" } , { price : { $lt : 95 } } ] } )
请查询person集合中年龄大于30岁,并且名字为Lucy的数据

复合查询--OR

当有多个查询条件但只需要满足其中一个条件就可以的时候,我们可以使用$or运算符,$or条件为一个数组类型的值,每个数组元素为一个BSON对象。
例如:inventory集合中检索数量(qty)大于100或者($or)价格(price)小于9.95的所有数据
db.inventory.find( { 
$or : [ 
{ qty : { $gt : 100 } },
{ price : { $lt : 9.95 } }
]
 } )

游标

1.什么是游标

find命令不直接返回结果,而是返回一个结果集的迭代器,即游标。

2.想要获取数据我们可以使用next方法来遍
4000
历游标,如下:

var myCursor  = db.inventory.find( { type : "food" } );
var myDocument = myCursor.hasNext() ? myCursor.next() : null;
if( myDocument ) {
var myItem = myDocument.item;
print( tojson(myItem) );
}

3.使用forEach方法也能实现游标的遍历,如下:

var myCursor = db.inventory.find({ type : "food" });
myCursor.forEach(printjson);

限制条件-结果集

很多时候查询返回结果集并不完全是你想要的,获取你只需要它们中间的一部分,这个时候我们可以通过限制条件来限制结果集返回的内容。
limit方法:设定返回结果集中的最大文档数量。
语法如下:
db.collection.find().limit(Num);

有的时候只需要返回结果集中的部分字段,这个时候我们可以通过传入字段条件的方式来实现。
语法如下:
db.collection.find(查询条件,字段条件);
字段条件:JSON对象,格式=>{字段:值},值等于1时表示需要返回,0时表示不需要返回
例如:返回person的status和age字段
db.person.find( {  } , { status:1,age:1 } )

MongoDB的基本知识已经了解了!下面就要开始新的旅程了!GOGO!

php配置MongoDB

1.下载对应的php_mongo.dll文件     下载地址
需要下载对应版本的dll文件,一开始因为下载的不对,试了好几次!突然发现英语的重要性,Non Thread Safe搭配iis环境使用,Thread Safe搭配apache环境使用。
下载完成后放入php的ext文件夹里。
2.在php.ini文件中加入mongo扩展,extension=php_mongo.dll



4.在浏览器中输入http://localhost:27017会出现   MongoDB默认使用27017端口
It looks like you are trying to access MongoDB over HTTP on the native driver port.


查看php是否能够使用MongoDB
新建一个php文件
<?php
$connection = new MongoClient("localhost");
//使用test数据库的foo集合
$collection = $connection->test->foo;
//向集合中插入数据,这里我不知道为什么会与mongodb插入方法不一样,应该就是php对MongoDB的操作方法吧!
$array = array( ' column_name ' => ' col '.rand(100,999),'column_exp'=>'xiaoping' );
$result = $collection->insert($array);
echo "插入新纪录的ID:".$array['_id'];
var_dump($result);

?>
成功操作后会返回ID值。今天就到这里,快要下班了!回去还要开始学习linux!GOGO!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mongodb