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 ...
随机推荐
- TCP移动端跟服务器数据交互
同一台笔记本下的客户端和服务端 TCPClient 客户端: // RootViewController.h#import <UIKit/UIKit.h>#import "As ...
- UCenter 通信失败 和 无法同步登陆的调试方法
1. 看请求 2./uc_server/control/admin/app.php echo "\$url = $url <br />\n \$status = $status& ...
- phpspec安装配置
安装 composer require phpspec/phpspec -dev 运行 bin/phpspec 在laravel中 vendor/bin/phpspec 配置phpspec.ym ...
- java编程算法
一.字符串相关操作 String s = " Hello java,hello android,hello OOP,HELLO String,hello JAVASE!"; Sys ...
- 【重要】ASCII码表
我们在做业务项目,客户端的输入总是无法控制,有各种各样的特殊字符,这些特殊字符就要借助ASCII码表才能判断,所以我做了一张图,方便查看 为什么要搞个表出来,下面的字符串中,你看看你能否看的出来是什么 ...
- Bluetooth LMP介绍
目录 1. 介绍 2. 数据包格式(Packet Format) 3. Procedure Rules 4. 通用回应消息(General Response Messages) 5. 设备特性(Dev ...
- Lambda中的一些方法的总结
public List<UserInfoBaseModel> GetNameByIDList(List<int> UserID) { var UserList = LoadRe ...
- httpclient提交json参数
private void httpReqUrl(List<HongGuTan> list, String url) throws ClientProtocolException, IOEx ...
- sublime text2 操作及插件
sublime text2 1. 文件快速导航: 这是sublime上面很好用的功能之一,ctrl+p可以调出窗口,菜单上的解释是gotoanythings ,确实如其所言,调出窗口后,直接输入关键字 ...
- Java学习-033-JavaWeb_002 -- 网页标记语言JSP基础知识
JSP 是 Sun 公司提倡的一门网页技术标准.在 HTML 文件中,加入 Java 代码就构成了 JSP 网页,当 Web 服务器访问 JSP 请求的时候,首先执行其中的 Java 程序源码,然后以 ...