MongoDB 入门

来源:互联网 发布:网络营销模拟软件 编辑:程序博客网 时间:2024/06/03 22:57

MongoDB 的安装还是比较简单的,我就不再这里过多描述。百度一下即可,MongoDB是文档数据库,不支持事务,但是MongoDB 所提供的功能还是非常丰富的。笔者在项目当中,会用作存储基础数据(因为不支持事务)。针对于微服务来说,我们会根据不用服务的实际业务去为不同的服务选择数据库,例如笔者在写商城项目的时候,就会选择在商品服务当中使用MongoDB作为数据库,至于为什么学到后面你就会知道了。其实概念和介绍MongoDB 网上都有一大堆了,我就没有必要ctrl C Ctrl V了。

按照MongoDB之后,通过mongod进行启动。MAC的用户可以使用brew进行安装非常简单,至于生成环境的安装和在docker的安装部署,后面有时间我也会写一下。不过想想我的SpringCloud的笔记到目前为止还没有写全,最近比较忙也没有时间写,而且被朋友荼毒我玩吃鸡游戏,就更加没有时间写了。但是后面我还是希望慢慢补上,事实上在实际项目当中已经有开始使用微服务开始投入生产环境的案例了,随着后面慢慢实战,希望能够写到更多的技术干货。废话说多了,开始实际点的。

我在MAC环境当中是使用brew进行安装的,非常简单方便。然后我们可以通过mongod命令,启动MongoDB的服务!(需要注意的是,mongod会读取/data/db目录下的文件,所以必须有读写权限)

MacBook-Pro:~ XXXUSER$ sudo mongod


然后接下来我们可以通过MongoDB自带的mongo client 客户端进行对MongoDB的访问,事实上你会发现,操作起来非常不方便。没有提示就不说了,重点是MongoDB的查询方式是使用JS语句进行查询的,所以一大堆的{}看到你头晕眼花。所以我建议还是会用一下3T studio 可视化工具进行开发。下面我们还是演示一下如何使用mongo client进行MongoDB的访问:

yanzhichaos-MacBook-Pro:~ yanzhichao$ mongoMongoDB shell version v3.4.6connecting to: mongodb://127.0.0.1:27017MongoDB server version: 3.4.6Server has startup warnings: 2017-10-16T11:24:12.520+0800 I CONTROL  [initandlisten] 2017-10-16T11:24:12.520+0800 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.2017-10-16T11:24:12.520+0800 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.2017-10-16T11:24:12.520+0800 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.2017-10-16T11:24:12.520+0800 I CONTROL  [initandlisten] 2017-10-16T11:24:12.520+0800 I CONTROL  [initandlisten] 2017-10-16T11:24:12.520+0800 I CONTROL  [initandlisten] ** WARNING: soft rlimits too low. Number of files is 256, should be at least 1000> dbtest> 

但是以下的代码演示我都会使用3T studio 进行

一、增删改查基础


1、创建数据库

这个创建就非常简单了。直接使用use 命令进入数据库,如果没有这个数据库就会自动创建一个,直接执行db会显示当前数据库的名称

use product_service;db;

结果:

product_service


2、创建collection(等于关系型数据库的表)

我们可以理解MongoDB的每个collection为一个表,每一个文档为collection的行。MongoDB最为强大之处,在于它的灵活性。下面我将添加一个文档(等于一行数据)到product collection 当中。

var newProduct = {product_name:"iPhoneX",price:8999,description:"一台贵到666的手机",product_number:"9830829131",brand:"苹果"};db.product.insert(newProduct);
解释一下:db是当前数据库,product是collection,insert是方法代表插入。MongoDB支持JavaScript大部分的语法,我这里使用了一个变量定义了一个对象,然后通过insert方法插入到product数据库当中。如果product 这个collection不存在,MongoDB会帮你自动建立一个。


我们可以通过以下命令获得我们插入到product的文档,后面会详细介绍查询方法。

db.product.find();
结果如下:

{ 

    "_id" :ObjectId("59e4599a203e071a1b02e543"), 

    "product_name" : "iPhoneX", 

    "price" :8999.0, 

    "description" :"一台贵到666的手机", 

    "product_number" : "9830829131", 

    "brand" :"苹果"

}

可以看到我们已经插入成功了。事实上,我们还可以每个文档插入的东西完全不一致,MongoDB没有要求collection的数据是结构化的。所以我们在SQL数据库改改表结构是非常痛苦的事情,但是在MongoDB完全不存在这样的问题。


3、简单的查询

上面已经使用过find方法了,我们还可以使用findOne方法。唯一的区别就是findOne是返回一个,find是返回多个。

db.product.findOne();

结果如下:

{ 

    "_id" :ObjectId("59e4599a203e071a1b02e543"), 

    "product_name" : "iPhoneX", 

    "price" :8999.0, 

    "description" :"一台贵到666的手机", 

    "product_number" : "9830829131", 

    "brand" :"苹果"

}


4、简单的更新

我们可以通过Update语句进行对文档的更新

db.product.update({product_name:"iPhoneX"},{product_name:"iPhoneX",price:9100,description:"一台贵到666的手机",product_number:"9830829131",brand:"苹果"});
可以发现,我们更新整个文档的。所以我必须要将整个文档都写上。至于我只想更新其中几个属性字段的话,后面会将。淡定!!!

至于一开始的{product_name:"iPhoneX"}是作为一个查询条件,就是说product_name为iPhoneX的文档进行修改。

查询结果如下:

{ 

    "_id" :ObjectId("59e4599a203e071a1b02e543"), 

    "product_name" : "iPhoneX", 

    "price" :9100.0, 

    "description" :"一台贵到666的手机", 

    "product_number" : "9830829131", 

    "brand" :"苹果"

}


5、删除文档

删除文档也非常简单,我们只需要提供要删除的文档匹配条件就行

db.product.remove({product_name:"iPhoneX"});
如果括号中,不添加任何参数就删除全部文档,更新也是一样的,如果括号没有条件就全部更新。

如果是删除全部文档的话,最为彻底的方式还是直接把整个collection删除好,没有别的,就是速度快。

db.product.drop();


二、基本数据类型

在概念上来说,MongoDB的文档与JavaScript的对象非常相似,可以认为它就是JSON差不多。事实上JSON所支持的数据类型没有MongoDB那么丰富。例如日期类型,id类型等等。

null:用于表示空值 {property:null}

boolean:没有什么好说 true和false {property:false}

数值:这个也没有什么好说的,默认是64位浮点数,也可以使用NumberInt或者NumberLong带符号整型。{property:123}

String:更加没有什么好说的,就是字符串 {property:"abc"}

日期:这个存储的是毫秒,重点是不存时区 {property:new Date()}

正则表达式:这个可以存正则表达式,但是比较少用{property:/weibo/i}

数组:{property:["a","b","c"]}

对象id:这样要说一下,这个是等于唯一的主键。这个键又MongoDB自动生成,可靠的唯一,在插入的文档的过程中如果没有手动添加_id属性的话,MongoDB将会自动为你创建_id并赋值唯一的id对象类型。{_id:ObjectId()}

代码:对没错还可以存代码,直接写个方法作为value

对象类型:简单来说就是内嵌 {property:{username:"tony",age:18}};



原创粉丝点击