非关系型数据库--MongoDB

MongoDB是一个著名的NoSQL数据库,顾名思义就是不使用SQL的数据库,目前在很多场景都有使用。如果你不喜欢使用笨拙的各种SQL数据库,可以尝试使用一下MongoDB,会有不一样的感受。本文就是一篇简单的Windows下的安装和使用教程。

下载安装与配置转载于 https://blog.csdn.net/u011054333/article/details/78588396

下载和安装

首先,先到MongoDB官网下载页下载社区版的服务器,由于这里是Windows系统,所以当然下载Windows版本的。注意我们要下载的是社区版,而不是导航条第一个的Atlas。如你所见,MongoDB官网是一个商业化的网站,Atlas正是它提供的一个商业版服务,可以让我们连接到他们的服务器。

 

具体版本默认第一个就可以了,功能最全,带有SSL支持。注意三个版本都是64位的,所以32位的操作系统无法运行。下载完成之后安装即可,大约150M左右的安装包,很快就可以安装完毕。

配置和启动

对于我来说,我将其安装到了D:Program FilesMongoDB。等到安装完成,打开D:Program FilesMongoDBServer3.4in就会发现MongoDB的一系列程序,主要用到的就是mongo.exe(客户端)和mongod.exe(服务端)。为了使用方便,最好把这个路径添加到环境变量中,以后就可以直接在终端中使用这些命令了。首先要做的事情当然是启动服务端。在终端直接执行mongod命令即可。

mongod

然后你就会发现如图所示的错误。

当然具体错误图里面说的很清楚了,没有数据文件夹。默认Windows版本,会在你安装盘符下寻找data/db文件夹作为数据文件夹,我的D盘上自然没有,所以会出现错误。解决办法很简单,在命令上添加--dbpath参数即可。

mongod --dbpath d:	estmongodbdata

当然还可以使用配置文件。配置文件名字可以随便起,但是格式必须是YAML格式的。例如我希望让可执行文件目录下的data文件夹作为数据文件夹,并且对于每个单独的数据库都有自己的目录,就可以这么配置(别忘了创建对应文件夹)。关于配置文件的详细文档可以参考官方Configuration File Options

storage:
dbPath: data
directoryPerDB: true

配置完成后,使用-f或者--config参数来指定配置文件。

mongod --config /etc/mongod.conf
mongod -f /etc/mongod.conf

这样,MongoDB服务器就可以成功启动了。

MongoDB的基本操作与使用

前戏

  启动MongoDB:mongod --dbpath "数据库目录",默认端口27017

  show dbs 查看所有存在磁盘上的数据库

  show tables 查看当前数据库存在磁盘上的数据表

  use "数据库名"  创建数据库或切换数据库

 ***使用了不存在的对象即创建该对象***

MongDB的数据

	[
		{
			"id":1,
			"name":"wbj",
			"age":18,
			"hobby":["lqy","lys"],
			"duixiang":{
				"id":2,
				"name":"lqy",
				"age":16
			}
		},
		{
			"id":2,
			"name":"lqy",
			"age":16,
			"duixiang":{
				"id":1,
				"name":"wbj",
				"age":18,
			}
		}
	]

 

MongDB和Mysql的区别

mysql      mongodb
数据库         数据库
表            collections
列                Field
row           documents

数据的增删改查

增加 insert

db.user.insert({"id":1,"name":"cui","age":73})

 官方推荐写法

db.user.insertMany([{ }])
db.user.insertOne({ })

查看 find

db.user.find()  #查找全部
db.user.finOne({})

 并列条件:

db.user.find({"id":2,"age":85})

或条件:

$or: db.user.find({$or:[{age:18},{name:"lqy"}]})

同一字段的 或条件

$in: db.user.find({age:{$in:[17,18,19]}})

子集检索

db.user.find({what:{$in:[2,1]}})

$all:满足所有条件

db.user.find({what:{$all:[2,1,3]}})

数学比较符:

$gt : 大于 db.user.find({age:{$gt:73}})
$gte : 大于等于
$lt : 小于
$lte : 小于等于
$eq : 等于 
: 也是等于

更新 :update  修改器 $set

db.user.update({"age":18},{$set:{"username":"cui"}})

官方推荐写法:

db.user.updateOne({"name":"lqy"},{$set:{"age":99}})
db.user.updateMany({"name":"lqy"},{$set:{"age":99}})

删除:remove / delete

db.user.remove({"age":18})

官方推荐写法:

db.user.deleteOne({"name":"lqy"})
db.user.deleteMany({"name":"lqy"})

$修改器:

$set : 暴力修改
$unset : 暴力删除字段 db.user.updateOne({"name":"wbj"},{$unset:{"hobby":1}})
$inc : 引用增加,在原有值的基础上增加 db.user.updateMany({},{$inc:{age:1}})

array修改器:

$push 增加元素 : db.user.updateOne({"name":"lqy"},{$push:{"hobby":"ball"}})
$pull 删除元素: db.user.updateOne({"name":"lqy"},{$pull:{"hobby":"ball"}})
$pushAll 迭代增加 : db.user.updateOne({"name":"lqy"},{$pushAll:{"hobby":["ball1","ball2","ball3"]}})
$pop 删除最后一条/第一条数据 :
  最后一条 db.user.updateOne({"name":"lqy"},{$pop:{"hobby":1}})
  第一条 db.user.updateOne({"name":"lqy"},{$pop:{"hobby":-1}})

$字符:

["hj","tt",1,2] # {"hobby":"hj"} hj 是hobby列表中的第0个元素 就把 0 这个数据放在了 $ 中

db.user.updateMany({hobby:"hj"},{$set:{"hobby.$":"喝酒"}})
****$: 存储符合条件的元素下标索引****

Object操作

db.user.updateOne({"book.name":"python"},{$set:{"book.price":19.9}})
db.user.updateOne({"book.name":"python"},{$inc:{"book.price":9.9}})

Array中的Object操作

db.user.updateOne({"hobby.age":84},{$set:{"hobby.$.age":73}})

Object中的Array

db,user.updateOne({"kecheng.class":15},{$set:{"kecheng.class.$":20}})

数据类型

ObjectID : Documents 自动生成的 _id
String : 字符串,必须是utf-8
Boolean : 布尔值,true或者false (只有python中写法是True,False)
Integer:整数(Int32,Int64)
Double : 浮点数(没有float类型,所有小数都是Double)
Arrays : 数组或者列表,多个值存储到一个键(相当于python中的list)
Object : 相当于python中的字典
Null : 空数据类型,一个特殊的概念,None Null
Timestamp : 时间戳(常用)
Date : 存储当前日期或时间unix时间格式(一般不用)

MongoDB中的跳过选取排序:

skip(5) 跳过五条数据
limit(5) 只显示五条数据
分页 skip(5).limit(5)

sort({age:1})  正序
sort({age:-1}) 倒序

如果三个关键字同时出现:
顺序1.sort 2.skip 3.limit

 使用pymongo:

find_one
insert_one
insert_many
update_one
update_many
delete_one
delete_many

sort("key",1)

  

原文地址:https://www.cnblogs.com/liuqingyang/p/10277571.html