mongodb的基本操作与插入文档(document)
一.mongodb的基本操作:
1.查看mongodb当前所有的databases : show dbs
2.选择数据库(database) : use databaseName(该数据库不存在则会自动创建,但是只存在于mongodb预设的缓存中,如果你不做任何操作,关闭数据库,那么该数据库也就不存在了,如果你往该库中添加了数据,那么该库就被真正的创建了)
3.查看数据库中的集合(collection) : show collections
4.获取mongodb中的帮助 : db.help() 里面有很多的实用性的操作,在你不知道mongodb有哪些操作的时候很有帮助
5.删除数据库 : use databaseName(必须先选择要删除的数据库), db.dropDatabase()
6.删除指定数据库下面的集合: use databaseName(必须先选择要删除集合的数据库), db.collectionName.drop()
二.mongodb插入文档
因为我们的mongodb使用javascript做shell的,所以可以说mongodb的客户端编程跟javascript差不多
往集合中插入的文档,其格式与json基本一样,所以存储在集合中的文档的格式都是bson,bson是一种类json的二进制形式的存储格式,称之为binary json
往集合中插入新的文档有两种方式,一种是insert(),一种是save()
区别:
insert()方法:当插入数据时,已经存在的_id的数据,则mongodb会直接报错,并返回对应的_id
save()方法:当插入数据时,它会先去循环一遍集合中的所有数据,判断插入的数据的_id是否存在于集合中,如果不存在则会直接插入一条新的文档,如果存在,则会调用mongodb的update()方法,更新_id对应的数据(相当于覆盖该_id的文档内容)
语法:
db.collectionName.insert(document)
db.collectionName.save(document)
注意:
1.在插入数据之前,需要注意的是mongodb对于field(字段)的数据类型非常的敏感,比如你插入了一个age字段,内容为30,是一个string类型的,但是你如果用一个整型30去查询,是查不到该数据的,因为数据类型不对,所以插入数据的时候要慎重,考虑好字段的类型
2.虽然mongodb灵活性很强,不像关系型数据库那样,建立一个新的字段,所有的数据都有该字段,但是在实际开发中,本人还是建议你插入数据尽量保持每一个集合的字段都相同,这样方便你在程序中的开发
1.插入文档方法之insert()


从上图可以看出,当你插入一条数据成功后,会返回写入的结果,插入成功,插入1条[ WriteResult({ "nInserted" : 1 }) ],而且你会发现,每条数据前面出现了一个"_id"的,它跟我们使用的关系型数据库不太一样,我们使用的关系型数据库一般primary key都是id,而且是自增的(1,2,3,4.....),而它这个是mongodb内为每条文档生成的一个唯一的标识,也具有唯一性,但是不会像关系型数据库那样自增而已,当然我们也可以插入指定的"_id"(等下说save()的时候再实践)
a.当我们插入一条数据,这个"_id"已经存在了,会发生什么呢?

b.当然insert()方法也可以插入_id(自定义_id的值,而不使用mongodb生成的_id),指定它的值跟我们关系型数据库一样(1,2,3,4,5,6....)
c. mongodb能不能跟关系型数据库一样批量插入呢?关系型数据库批量插入:insert into tablename(columns)values(text1),(text2),(text3).........,而我们的mongodb是不能批量插入的,只能通过循环来实现批量插入

d.在mongodb中每个document的字段field可以不相同(mongodb的灵活性,但是不建议这么做)

2.插入文档方法之save():
与insert()方法差不多都是插入文档,唯一的不同就是如果_id存在,save()则会更新这条_id对应的数据,而insert则是直接报错,并返回该_id

也可以批量更新,同时不存在的则插入,存在的则更新(下图_id只有1,2,3,通过循环更新了1,2,3,同时也添加了_id为4,5的两条数据):

通过上面的示例,我们可以发现:
1.mongodb不需要事先定义collection,在第一次插入数据时,它会自动创建collection
2.在collection中每添加一条document,除非我们自己指定_id,否则,系统都会生成一个唯一的标识ObjectId
3.在collection中,每个document可以有不同的field(字段)
三、关于mongodb能不能和关系型数据库那样插入成功后返回插入数据的id
本人在写php操作mongodb的类的时候,遇到了需要返回id的问题,下面是MongoDB mode的代码:
public function insertDocument($collection,$data=array(),$is_set=false){
if(!$collection || empty($data) || !is_array($data)){
die('collection and data can not be empty!');
}
$this->collection = $this->MongoDB->{$collection};
try{
if($is_set){
//批量
$i=0;
$count = count($data);
while($i<$count){
$result[] = $this->collection->insert($data[$i],array('safe'=>true));
$i++;
}
}else{
//单条向集合中安全的插入数据,返回插入状态
$result = $this->collection->insert($data,array('safe'=>true));
}
}catch(MongoCursorException $e){
$this->error = $e->getMessage();
return false;
}
return array($result,$data);
}
下面是我插入的数据:
$arr = array('name'=>'Nginx4','age'=>121,'add_time'=>'2014-03-02');
接下来是我插入成功后返回的信息截图:

下面我进入cmd,查询返回的_id对应的数据,看看是否存在该数据,并且数据是否正确(数据一致):

对比一下插入的数据,和返回的数据,你会发现插入的数据的数组中多了一个_id,mongodb在添加新的文档之前会把_id生成好,拼接到数组中,然后插入到集合中,所以我们只需要返回你要插入的数据的数组就可以得到该数据插入到集合后的_id了
如有错误的地方,欢迎批评指正,本人新手,初学!!!!!!
mongodb的基本操作与插入文档(document)的更多相关文章
- Mongodb(3)插入文档,更新文档,删除文档
insert() 方法 要插入数据到 MongoDB 集合,需要使用 MongoDB 的 insert() 或 save() 方法. 插入文档:db.COLLECTION_NAME.insert(d ...
- Mongodb的基本操作-数据库 集合 文档的增删改查
数据库操作: //查看有哪些数据库 > show dbs local 0.078GB mydb 0.078GB //use操作将切换到一个数据库 如果数据库存在将直接切换 如果不存在 那么 ...
- MongoDB 插入文档
文档的数据结构和JSON基本一样. 所有存储在集合中的数据都是BSON格式. BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON. 插入文档 MongoDB 使用 inse ...
- MongoDB 教程(七):插入文档、更新文档、删除文档
MongoDB 插入文档 文档的数据结构和JSON基本一样. 所有存储在集合中的数据都是BSON格式 —— BSON是一种类json的二进制形式的存储格式,简称Binary JSON. MongoDB ...
- MongoDB插入文档
db.collection.insertOne() 插入单个文档.db.collection.insertMany() 插入多个文档.db.collection.insert() 插入单/多个文档. ...
- MongoDB快速入门(四)- 插入文档
插入文档 将数据插入到MongoDB集合,需要使用MongoDB 的 insert() 方法. 语法 insert()命令的基本语法如下: >db.COLLECTION_NAME.insert( ...
- 【Mongodb教程 第六课 】MongoDB 插入文档
insert() 方法 要插入数据到 MongoDB 集合,需要使用 MongoDB 的 insert() 或 save() 方法. 语法 insert() 命令的基本语法如下: >db.CO ...
- MongoDB(四):数据类型、插入文档、查询文档
1. 数据类型 MongoDB支持许多数据类型. 字符串 - 这是用于存储数据的最常用的数据类型.MongoDB中的字符串必须为UTF-8. 整型 - 此类型用于存储数值. 整数可以是32位或64位, ...
- Python MongoDB 插入文档
章节 Python MySQL 入门 Python MySQL 创建数据库 Python MySQL 创建表 Python MySQL 插入表 Python MySQL Select Python M ...
随机推荐
- 关于0x000000c2问题解决方法
首先大家要用进入PE系统,按照我说的顺序做就可以解决了! 1,进入PE后找到系统盘,默认一般为C盘-->进入WINDOWS文件夹-->进入system32文件夹-->找到regedt ...
- 必应(Bing)每日图片获取API
必应(Bing)每日图片获取API January 11, 2015 API http://lab.dobyi.com/api/bing.php 介绍 Value Description title ...
- Bootstrap页面布局18 - BS导航路径以及分页器
导航路径:又叫“面包屑”,功能是让用户知道所处的位置. <!--面包屑--> <ul class='breadcrumb'> <li><a href='#'& ...
- wdate-year-month-week-gategory-amount-coin
---2016-12-02 19:46:39 the whole table DISTINCT field SUM(field) COUNT(field) --- 888983 rows OK SEL ...
- java override
java override // 覆盖父类的方法,在子类直接调用子类内部这个方法时 public class TestCalc{ protected static class Wine{ String ...
- 更新Delphi中SVN客户端版本的方法
Delphi从XE以后集成里SVN客户端, 安装完Delphi以后, 在bin\subversion下, 存放的就是SVN客户端文件, 可惜版本有点低(好像是1.7的) 如果想更新成高版本的客户端文件 ...
- SDP协议译稿(Part 1)
本文的翻译内容是基于Bluetooth Core Spec 2.1+EDR 协议中对SDP的描述,很多都是个人的理解,难免有疏漏,有争议或者疑问的地方,欢迎在此留言进行探讨. 2. Overview ...
- wget ftp
今天操作远端机器的时候发现少一个安装包, 需要传到对方的机器上,还能使用通过的老办法,直接SSH连上去了,发现传的很慢, 只有40K的样子, 看时间还需要二个多小时就有点受不了了.想想有一台FTP服务 ...
- python : dictionary changed size during iteration
1. 错误方式 #这里初始化一个dict >>> d = {'a':1, 'b':0, 'c':1, 'd':0} #本意是遍历dict,发现元素的值是0的话,就删掉 >> ...
- oracle中截取某个字符前面和后面的值
创建测试表及数据 create table test(name varchar2(10)); insert into test values ('2-15');insert into test val ...