MongDB篇,第一章:数据库知识1
MongDB 数据库知识1
程序 = 数据结构 + 算法
数据存储阶段
1,文件管理阶段 (.txt .doc .xls)
优点: 数据可以长期保存;可以存储大量的数据;使用简单
缺点: 数据的一致性差;数据的查找修改不方便;数据的冗余性大
2,数据库存储阶段
优点 : 数据组织结构化,降低了冗余;方便扩展;方便程序调用,做自动化的处理
缺点 : 数据库使用往往需要特定的语句或者命令进行操 作,相对比较复杂
几个概念
数据 :能够输入到计算机中并被识别处理的信息的集合;
数据结构:研究一个数据集合中,数据之间关系的学科;
数据库:按照数据结构,存储管理数据的仓库。 数据库是在数据库管理系统管理和控制下在一定介质上的 数据集合。
数据库管理系统:数据库管理软件,用于建立维护数据库;
数据库系统:由数据库和数据库管理系统等开发工具组成 的集合;
关系型数据库
采用关系模型来组织数据结构的数据库 (二维表)
Oracle DB2 SQLServer MySQL SqLite
优点:(1)容易理解,逻辑类似常见表格
(2)使用方便,都使用sql语句,sql语句非常成熟
(3)数据的一致性高,冗余低,完整性好
(4)技术成熟,可以使用外部链接等复杂的操作
缺点:(1)每次都需要sql语句的解析,消耗较大
(2)不能很好满足并发需求,特别是海量数据的爆发 ,关系型数据库普遍读写能力不足
(3)关系型数据库内部每一步都要加锁的操作,以保 证操作的原子性,增加了数据库负担
(4)数据的一致性有时会导致大量的空间浪费
数据库范式:
https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E5%BA%93%E8%8C%83%E5%BC%8F/7309898?fr=aladdin
非关系型数据库 (NoSql --> not only sql)
优点 : (1)高并发,读写能力强;
(2)普遍比关系型数据库容易扩展
(3)弱化了数据结构,降低了数据的一致性
缺点 :(1) 通用性差,没有sql一样的一致化的操作
(2)操作灵活,容易混乱;
(3)没有join等操作,有的数据库不支持关系型数据库中类似事务等操作。版本更新快;
Nosql的使用情况:
1. 数据一致性要求低
2. 数据库处理海量并发存储
3. 数据库大小不容易估算,需要分布扩展
4. 给定的数据比较容易建立Nosql模型
Nosql的分类:
(1)键值型数据库 : Redis oracle BDB tokyo
(2)列存储数据库 :Hbase
(3)文档型数据库 : MongoDB
(4)图形数据库:
MongoDB数据库 (非关系型数据库---> 文档型数据库)
1. 由c++编写的数据库管理系统;
2. 支持丰富的增删改查操作;
3. 支持丰富的数据类型;
4. 支持众多的编程语言接口(python ruby PHP c++ c#)
5. 使用方便,便于部署。在非关系数据库中属于比较成熟 的数据库
MongoDB安装
自动安装:
sudo apt-get install mongodb
cookie
whereis 软件名称 : 查看软件位置
默认安装位置: /var/lib/mongodb
配置文件位置: /etc/mongodb.conf
命令集: /usr/bin /usr/local/bin
手动安装:
1.下载MongoDB (开源)
www.mongodb.com--->get mongodb-->community server
选择想要的版本下载
2.选择合适的位置解压 (/usr/local /opt)
tar 解压后得到Mongodb文件夹
3. 将MongoDB文件夹中的bin文件夹变为环境变量
PATH=$PATH:/opt/mongo..../bin
export PATH
将以上两句写入 /etc/rc.local 或者/etc/bash.bashrc 自动添加脚本
4. 重启系统
reboot
source /etc/bash.bashrc
5, 设置数据库的存储位置:
sudo mkdir -p /data/db
mongod --dbpath /data/db
# cat /etc/rc.local | grep -v '#'
touch /var/lock/subsys/local
PATH=$PATH:/tmp/mongodb-linux-x86_64-4.0.0/bin
export PATH
[root@shenzhen ~]# source /etc/rc.local ^C
[root@shenzhen ~]# mongo
mongo mongoexport mongoreplay mongostat
mongod mongofiles mongorestore mongotop
mongodump mongoimport mongos
6,设置数据库端口号:27017
mongod --port 8888
如果不设置默认是27017
centos7.2安装mongodb
转载:https://blog.csdn.net/junshangshui/article/details/79371316
mongo
进入mongo shell界面 :mongodb的交互界面(主要:javaScript),用来通 过mongo语句操作mongodb数据库
退出mongo shell : quit() 或者 ctrl + c
组织结构 : 键值对--》 文档 ---》 集合 --》数据库
数据类型:字符串 、整型、布尔值、 浮点型、 数组类型、时间类型、文档类型、 空值null、字符串(symbol通常表示特殊字符)
时间cuo 、 ObjectID、 二进制、 代码、 正则表达式;
区别:
mysql mongo 含义
database database 数据库
table collection 表/集合
column field 字段/域
row document 记录/文档
index index 索引
----------------------------------
id | name | age
------------------------------------
1 | lucy | 18
--------------------------------------
{
"_id": ObjectId("sgegrergtrhy123321htht"),
"name":"Lucy",
"age":18
},
{
"_id": ObjectId("sfsgdrsgy125671rtrttht"),
"name":"Lili",
"age":19
}
(1)创建数据库: use databaseName
e.g. use stu
* use 实际上是表示选择使用哪个数据库,如果这个数 据库不存在则表示同时创建这个数据库
* 使用use后数据库不会被马上创建,而是需要写入数据 时才会创建
(2)查看当前系统下数据库: show dbs
系统数据库:
admin: 存放用户及其权限;
local : 存储本地数据;
config : 存储分片信息;
数据库命名规则:
1,使用UTF-8字符; 2,不能含有空格,点 / \ ‘\0’ 字符 ;3,长度不能超过64字节; 4,不能喝系统数据库重名; 5,习惯使用小写字母,表达数据库功能;
db: mongo系统全局变量,代表当前正在使用的数据库;
注: 当不用use选择任何数据库时,db表示test。此时插入数据则创建test数据库;
进入报错问题:
https://blog.csdn.net/wangli61289/article/details/44459467 #############
> use std
switched to db std
> db
std
> show dbs;
admin 0.000GB
config 0.000GB
local 0.000GB
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
> db.std.insert({"name":"xixi"})
WriteResult({ "nInserted" : 1 })
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
std 0.000GB
> db #代表当前正在使用的数据库
std
> use admin
switched to db admin
> db
admin
>
> db
test
> db.mm.insert({'mmtest':'hello'})
WriteResult({ "nInserted" : 1 })
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
std 0.000GB
test 0.000GB
>
(3)数据库的备份和恢复;
备份: mongodump -h dbhost -d dbname -o dbdir
e.g.
mongodump -h 127.0.0.1 -d stu -o bak
将127.0.0.1主机上stu数据库备份入bak文件夹
[root@shenzhen ~]# mongodump -h 127.0.0.1 -d std -o /tmp/student
2018-07-10T21:11:27.186+0800 writing std.mm to
2018-07-10T21:11:27.232+0800 writing std.std to
2018-07-10T21:11:27.550+0800 done dumping std.mm (1 document)
2018-07-10T21:11:27.550+0800 done dumping std.std (1 document)
[root@shenzhen ~]# cd /tmp/
[root@shenzhen tmp]# cd student/
[root@shenzhen student]# ls
std
[root@shenzhen student]# cat std/
cat: std/: Is a directory
[root@shenzhen student]# cd std/
[root@shenzhen std]# ls
mm.bson mm.metadata.json std.bson std.metadata.json
[root@shenzhen std]#
恢复: mongorestore -h <localhost>:<port> -d dbname <path>
e.g.
mongorestore -h 127.0.0.1:27017 -d student bak/stu
将bak文件夹下备份的stu数据库恢复到 本机的student数据库中。student不存在则会自动创建
[root@shenzhen ~]# mongorestore -h 127.0.0.1:27017 -d test /tmp/student/std/
2018-07-10T21:20:05.858+0800 the --db and --collection args should only be used when restoring from a BSON file. Other uses are deprecated and will not exist in the future; use --nsInclude instead
2018-07-10T21:20:05.874+0800 building a list of collections to restore from /tmp/student/std dir
2018-07-10T21:20:06.239+0800 reading metadata for test.mm from /tmp/student/std/mm.metadata.json
2018-07-10T21:20:06.240+0800 restoring test.mm from /tmp/student/std/mm.bson
2018-07-10T21:20:06.297+0800 reading metadata for test.std from /tmp/student/std/std.metadata.json
2018-07-10T21:20:06.397+0800 no indexes to restore
2018-07-10T21:20:06.397+0800 finished restoring test.mm (1 document)
2018-07-10T21:20:06.463+0800 restoring test.std from /tmp/student/std/std.bson
2018-07-10T21:20:06.494+0800 no indexes to restore
2018-07-10T21:20:06.494+0800 finished restoring test.std (1 document)
2018-07-10T21:20:06.494+0800 done
[root@shenzhen ~]#
> use test
switched to db test
> show tables #恢复前
mm
> show tables #恢复后
mm
std
>
(4)数据库的检测;
mongostat
insert (每秒插入次数) query(每秒查询次数) update(每秒更新次数) delete(每秒删除次数) getmore command(每秒运行命令次数)
dirty used flushes (每秒向磁盘写入次数) vsize (使用虚拟内存情况) res(使用物理内存情况)
qrw arw net_in net_out conn time
[root@shenzhen ~]# mongostat
insert query update delete getmore command dirty used flushes vsize res qrw arw net_in net_out conn time
*0 *0 *0 *0 0 4|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 363b 138k 2 Jul 10 21:23:19.787
*0 *0 *0 *0 0 0|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 47b 18.0k 2 Jul 10 21:23:23.137
*0 *0 *0 *0 0 0|0 0.0% 0.0% 1 997M 54.0M 0|0 1|0 17b 6.48k 2 Jul 10 21:23:32.429
*0 *0 *0 *0 0 0|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 16b 4.60k 3 Jul 10 21:23:45.527
*0 *0 *0 *0 0 5|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 460b 175k 3 Jul 10 21:23:45.870
*0 *0 *0 *0 0 2|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 181b 69.1k 3 Jul 10 21:23:46.741
*0 *0 *0 *0 0 2|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 173b 66.0k 3 Jul 10 21:23:47.654
*0 *0 *0 *0 0 1|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 145b 55.4k 3 Jul 10 21:23:48.742
*0 *0 *0 *0 0 2|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 173b 66.0k 3 Jul 10 21:23:49.654
*0 *0 *0 *0 0 3|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 216b 60.6k 3 Jul 10 21:23:50.653
insert query update delete getmore command dirty used flushes vsize res qrw arw net_in net_out conn time
*0 *0 *0 *0 0 2|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 158b 60.3k 3 Jul 10 21:23:51.652
*0 *0 *0 *0 0 1|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 154b 59.0k 3 Jul 10 21:23:52.673
*0 *0 *0 *0 0 2|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 161b 61.5k 3 Jul 10 21:23:53.652
*0 *0 *0 *0 0 2|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 158b 60.4k 3 Jul 10 21:23:54.650
*0 *0 *0 *0 0 2|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 158b 60.2k 3 Jul 10 21:23:55.649
*0 *0 *0 *0 0 1|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 156b 59.8k 3 Jul 10 21:23:56.657
*0 *0 *0 *0 0 2|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 159b 60.8k 3 Jul 10 21:23:57.647
*0 *0 *0 *0 0 1|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 157b 60.1k 3 Jul 10 21:23:58.649
*0 *0 *0 *0 0 1|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 156b 59.8k 3 Jul 10 21:23:59.657
*0 *0 *0 *0 0 2|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 204b 58.3k 3 Jul 10 21:24:00.691
insert query update delete getmore command dirty used flushes vsize res qrw arw net_in net_out conn time
*0 *0 *0 *0 0 2|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 164b 62.7k 3 Jul 10 21:24:01.651
*0 *0 *0 *0 0 2|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 158b 60.4k 3 Jul 10 21:24:02.649
*0 *0 *0 *0 0 1|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 157b 60.0k 3 Jul 10 21:24:03.653
*0 *0 *0 *0 0 2|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 158b 60.4k 3 Jul 10 21:24:04.650
*0 *0 *0 *0 0 1|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 155b 59.1k 3 Jul 10 21:24:05.669
*0 *0 *0 *0 0 2|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 160b 61.4k 3 Jul 10 21:24:06.650
*0 *0 *0 *0 0 1|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 157b 60.0k 3 Jul 10 21:24:07.654
*0 *0 *0 *0 0 1|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 157b 60.1k 3 Jul 10 21:24:08.655
*0 *0 *0 *0 0 2|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 158b 60.4k 3 Jul 10 21:24:09.652
*0 *0 *0 *0 0 1|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 157b 60.1k 3 Jul 10 21:24:10.655
insert query update delete getmore command dirty used flushes vsize res qrw arw net_in net_out conn time
*0 *0 *0 *0 0 1|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 157b 60.2k 3 Jul 10 21:24:11.655
*0 *0 *0 *0 0 1|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 157b 60.2k 3 Jul 10 21:24:12.656
*0 *0 *0 *0 0 2|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 158b 60.3k 3 Jul 10 21:24:13.655
*0 *0 *0 *0 0 2|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 158b 60.5k 3 Jul 10 21:24:14.649
*0 *0 *0 *0 0 3|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 212b 60.3k 3 Jul 10 21:24:15.649
*0 *0 *0 *0 0 1|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 157b 60.0k 3 Jul 10 21:24:16.653
*0 *0 *0 *0 0 1|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 155b 59.2k 3 Jul 10 21:24:17.670
*0 *0 *0 *0 0 2|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 161b 61.5k 3 Jul 10 21:24:18.650
*0 *0 *0 *0 0 1|0 0.0% 0.0% 0 997M 54.0M 0|0 1|0 157b 60.0k 3 Jul 10 21:24:19.654
^C2018-07-10T21:24:19.837+0800 signal 'interrupt' received; forcefully terminating
[root@shenzhen ~]#
mongotop 检测每个数据库的读写时长;
ns 数据表 total read 读时长 write 写时长
[root@shenzhen ~]# mongotop
2018-07-10T21:42:38.828+0800 connected to: 127.0.0.1 ns total read write 2018-07-10T21:42:39+08:00
admin.system.roles 0ms 0ms 0ms
admin.system.version 0ms 0ms 0ms
local.startup_log 0ms 0ms 0ms
local.system.replset 0ms 0ms 0ms
std.mm 0ms 0ms 0ms
std.std 0ms 0ms 0ms
test.mm 0ms 0ms 0ms
test.std 0ms 0ms 0ms ns total read write 2018-07-10T21:42:40+08:00
admin.system.roles 0ms 0ms 0ms
admin.system.version 0ms 0ms 0ms
local.startup_log 0ms 0ms 0ms
local.system.replset 0ms 0ms 0ms
std.mm 0ms 0ms 0ms
std.std 0ms 0ms 0ms
test.mm 0ms 0ms 0ms
test.std 0ms 0ms 0ms ns total read write 2018-07-10T21:42:41+08:00
admin.system.roles 0ms 0ms 0ms
admin.system.version 0ms 0ms 0ms
local.startup_log 0ms 0ms 0ms
local.system.replset 0ms 0ms 0ms
std.mm 0ms 0ms 0ms
std.std 0ms 0ms 0ms
test.mm 0ms 0ms 0ms
test.std 0ms 0ms 0ms ns total read write 2018-07-10T21:42:43+08:00
admin.system.roles 0ms 0ms 0ms
admin.system.version 0ms 0ms 0ms
local.startup_log 0ms 0ms 0ms
local.system.replset 0ms 0ms 0ms
std.mm 0ms 0ms 0ms
std.std 0ms 0ms 0ms
test.mm 0ms 0ms 0ms
test.std 0ms 0ms 0ms ns total read write 2018-07-10T21:42:44+08:00
admin.system.roles 0ms 0ms 0ms
admin.system.version 0ms 0ms 0ms
local.startup_log 0ms 0ms 0ms
local.system.replset 0ms 0ms 0ms
std.mm 0ms 0ms 0ms
std.std 0ms 0ms 0ms
test.mm 0ms 0ms 0ms
test.std 0ms 0ms 0ms ns total read write 2018-07-10T21:42:45+08:00
admin.system.roles 0ms 0ms 0ms
admin.system.version 0ms 0ms 0ms
local.startup_log 0ms 0ms 0ms
local.system.replset 0ms 0ms 0ms
std.mm 0ms 0ms 0ms
std.std 0ms 0ms 0ms
test.mm 0ms 0ms 0ms
test.std 0ms 0ms 0ms ns total read write 2018-07-10T21:42:46+08:00
admin.system.roles 0ms 0ms 0ms
admin.system.version 0ms 0ms 0ms
local.startup_log 0ms 0ms 0ms
local.system.replset 0ms 0ms 0ms
std.mm 0ms 0ms 0ms
std.std 0ms 0ms 0ms
test.mm 0ms 0ms 0ms
test.std 0ms 0ms 0ms ns total read write 2018-07-10T21:42:47+08:00
admin.system.roles 0ms 0ms 0ms
admin.system.version 0ms 0ms 0ms
local.startup_log 0ms 0ms 0ms
local.system.replset 0ms 0ms 0ms
std.mm 0ms 0ms 0ms
std.std 0ms 0ms 0ms
test.mm 0ms 0ms 0ms
test.std 0ms 0ms 0ms ns total read write 2018-07-10T21:42:48+08:00
admin.system.roles 0ms 0ms 0ms
admin.system.version 0ms 0ms 0ms
local.startup_log 0ms 0ms 0ms
local.system.replset 0ms 0ms 0ms
std.mm 0ms 0ms 0ms
std.std 0ms 0ms 0ms
test.mm 0ms 0ms 0ms
test.std 0ms 0ms 0ms ns total read write 2018-07-10T21:42:49+08:00
admin.system.roles 0ms 0ms 0ms
admin.system.version 0ms 0ms 0ms
local.startup_log 0ms 0ms 0ms
local.system.replset 0ms 0ms 0ms
std.mm 0ms 0ms 0ms
std.std 0ms 0ms 0ms
test.mm 0ms 0ms 0ms
test.std 0ms 0ms 0ms ns total read write 2018-07-10T21:42:50+08:00
admin.system.roles 0ms 0ms 0ms
admin.system.version 0ms 0ms 0ms
local.startup_log 0ms 0ms 0ms
local.system.replset 0ms 0ms 0ms
std.mm 0ms 0ms 0ms
std.std 0ms 0ms 0ms
test.mm 0ms 0ms 0ms
test.std 0ms 0ms 0ms ns total read write 2018-07-10T21:42:51+08:00
admin.system.roles 0ms 0ms 0ms
admin.system.version 0ms 0ms 0ms
local.startup_log 0ms 0ms 0ms
local.system.replset 0ms 0ms 0ms
std.mm 0ms 0ms 0ms
std.std 0ms 0ms 0ms
test.mm 0ms 0ms 0ms
test.std 0ms 0ms 0ms ^C2018-07-10T21:42:52.104+0800 signal 'interrupt' received; forcefully terminating
[root@shenzhen ~]#
(5)删除数据库:
db.dropDatabase() 删除db当前所代表的数据库
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
std 0.000GB
test 0.000GB
> use test
switched to db test
> db.dropDatabase()
{ "dropped" : "test", "ok" : 1 }
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
std 0.000GB
>
(6)创建集合
db.createCollection(collection_name)
e.g. db.createCollection('class2')
创建一个集合名字为class2
(7)查看数据库中的集合
show tables 或 show collections
集合的命名规则:1,不能是空字符串; 2,不能含有‘\0’ ; 3,不能以system.开头,这是系统集合的保留前缀;
4,集合不要和保留字段重名,不要包含$
(8)创建集合2
当向一个集合中插入一条文档,如果这个集合不存在,则会自动创建集合;
db.collection_name.insert()
e.g. db.class3.insert({name:'Lucy'})
如果class3不存在则自动创建这个集合;
> show collections
class1
std
> db.class3.insert({'name':'lili','age':19})
WriteResult({ "nInserted" : 1 })
> show tables
class1
class3
std
>
(9)删除集合
db.collection_name.drop()
e.g. db.class3.drop()
删除class3这个集合
> show tables
class1
class3
std
> db.std.drop()
true
> show tables
class1
class3
>
(10)文档:
在MongoDB中数据的组建形式;
由键值组成,类似python中的字典;
bson ---> json
MongoDB中的数据文档为bson格式;(使用键值的方式保存和展示数据)
文档中键的命名规则:1,utf-8 格式的字符串; 2,不能有\0 不能为空(习惯上不用 . 和$ )
3,以_开头的很多都是保留的键, 所以一般不用_开头;
注意:文档中的健值对是有序的; 文档的值指的就是文档支持的数据类型; MongoDB区分大小写;
支持数据类型:
整型 整型, 32位整型
布尔 True False
浮点型 存储小数
Arrays 列表数组
Timestamp 时间cuo
Date 时间日期
Object 内部文档
Null 空值
Symbol 特殊字符字符串
Binary data 二进制数据
code 代码
regex 正则表达式
ObjectID ObjectId字串
ObjectId :系统自动为每个文档生成的不重复的主键;
键名:_id
值:ObjectId("5b28a02c154710728ef6cac2")
"_id" : ObjectId("5b28a02c154710728ef6cac2")
24位 16进制数 ----》保证_id值的唯一性;
8位文档创建时间 6位机器id 4位进程id 6位计数器;
集合中的文档:
1,集合中的文档不一定都有相同的域;
2,集合中的文档域的个数也不一定相同
集合设计原则:
1,同一个文档存放在一个集合中;
2,集合中尽量存储域和文档格式相近的文档;
3,集合中可以存放文档数据的差异;
(11)插入文档;
db.collection_name.insert()
* 插入操作是键可以不加引号
* 查看插入结果 db.class1.find()
* _id 为系统自动添加主键,如果自己写_id则会使用自 己的值,但是仍然不能重复
_id 为系统定义的主键值,如果使用系统值则保证不重复,如果自定义值即会覆盖系统值,但是自己也不能让该域重复;
> show tables
class1
class3
> db.class1.insert({name:'xiaoming',age: 20, sex:'m'})
WriteResult({ "nInserted" : 1 })
> db.class1.insert({name:'ttttt',age: 20, sex:'m'})
WriteResult({ "nInserted" : 1 })
> db.class1.find()
{ "_id" : ObjectId("5b44c691a1e0b5db3cff6a6c"), "name" : "xiaoming", "age" : 20, "sex" : "m" }
{ "_id" : ObjectId("5b44c6d5a1e0b5db3cff6a6d"), "name" : "ttttt", "age" : 20, "sex" : "m" }
>
注:插入文档时,域名(键)可以不加引号;
插入多条文档;
db.collectionName.insert([{},{},{}])
e.g.
db.class0.insert([{name:'阿花',age:28},{name:'阿彪',age:27},{name:'阿宝',age:'26'}])
> db.class1.insert([{name:'ttttt',age: 20, sex:'m'},{name:'aaa',age:18},{name:'bbb',age:21}]) BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 3,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
>
>
save 插入文档
db.collectionName.save()
e.g. db.class0.save({name:'阿荣',age:29})
*如果不加_id选项时save和insert相同
*如果加_id项,则如果此_id值存在则save表示修改该文 档内容,如果不存在则正常插入;
* save 不能够插入多条文档
> db.class1.find()
{ "_id" : ObjectId("5b44c691a1e0b5db3cff6a6c"), "name" : "xiaoming", "age" : 20, "sex" : "m" }
{ "_id" : ObjectId("5b44c6d5a1e0b5db3cff6a6d"), "name" : "ttttt", "age" : 20, "sex" : "m" }
> db.class1.insert([{name:'ttttt',age: 20, sex:'m'},{name:'aaa',age:18},{name:'bbb',age:21}]) BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 3,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
>
> db.class1.save({name:'xxxxx',age:11})
WriteResult({ "nInserted" : 1 })
> db.class1.find()
{ "_id" : ObjectId("5b44c691a1e0b5db3cff6a6c"), "name" : "xiaoming", "age" : 20, "sex" : "m" }
{ "_id" : ObjectId("5b44c6d5a1e0b5db3cff6a6d"), "name" : "ttttt", "age" : 20, "sex" : "m" }
{ "_id" : ObjectId("5b44c7b7a1e0b5db3cff6a6e"), "name" : "ttttt", "age" : 20, "sex" : "m" }
{ "_id" : ObjectId("5b44c7b7a1e0b5db3cff6a6f"), "name" : "aaa", "age" : 18 }
{ "_id" : ObjectId("5b44c7b7a1e0b5db3cff6a70"), "name" : "bbb", "age" : 21 }
{ "_id" : ObjectId("5b44c9eaa1e0b5db3cff6a71"), "name" : "xxxxx", "age" : 11 }
> db.class1.save({_id:1,name:'mimi',age:19})
WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : 1 })
> db.class1.find()
{ "_id" : ObjectId("5b44c691a1e0b5db3cff6a6c"), "name" : "xiaoming", "age" : 20, "sex" : "m" }
{ "_id" : ObjectId("5b44c6d5a1e0b5db3cff6a6d"), "name" : "ttttt", "age" : 20, "sex" : "m" }
{ "_id" : ObjectId("5b44c7b7a1e0b5db3cff6a6e"), "name" : "ttttt", "age" : 20, "sex" : "m" }
{ "_id" : ObjectId("5b44c7b7a1e0b5db3cff6a6f"), "name" : "aaa", "age" : 18 }
{ "_id" : ObjectId("5b44c7b7a1e0b5db3cff6a70"), "name" : "bbb", "age" : 21 }
{ "_id" : ObjectId("5b44c9eaa1e0b5db3cff6a71"), "name" : "xxxxx", "age" : 11 }
{ "_id" : 1, "name" : "mimi", "age" : 19 }
> db.class1.save({_id:1,name:'aiai',age:19})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.class1.find()
{ "_id" : ObjectId("5b44c691a1e0b5db3cff6a6c"), "name" : "xiaoming", "age" : 20, "sex" : "m" }
{ "_id" : ObjectId("5b44c6d5a1e0b5db3cff6a6d"), "name" : "ttttt", "age" : 20, "sex" : "m" }
{ "_id" : ObjectId("5b44c7b7a1e0b5db3cff6a6e"), "name" : "ttttt", "age" : 20, "sex" : "m" }
{ "_id" : ObjectId("5b44c7b7a1e0b5db3cff6a6f"), "name" : "aaa", "age" : 18 }
{ "_id" : ObjectId("5b44c7b7a1e0b5db3cff6a70"), "name" : "bbb", "age" : 21 }
{ "_id" : ObjectId("5b44c9eaa1e0b5db3cff6a71"), "name" : "xxxxx", "age" : 11 }
{ "_id" : 1, "name" : "aiai", "age" : 19 }
>
MongDB篇,第一章:数据库知识1的更多相关文章
- MySQL----MySQL数据库入门----第一章 数据库入门
第一章 数据库入门 1.1 数据库基础知识 1.1.1 数据库概述 数据不仅包括普通意义上的数字,还包括文字.图像.声音等.也就是说,凡是在计算机中用来描述事物的记录都可称作数据. 数据库的基本特点: ...
- 第一章 数据库概述、MySQL的安装和配置
第一章 数据库概述.MySQL的安装和配置 1.为什么要使用数据库 最早是纸质文件来存储数据 缺点:不易保存,占用空间大 计算机出现以后,采用软件来进行保存(excel) 缺点:容易损坏 文件 ...
- wpf(第一章 基础知识)
wpf第一章基础知识:通过vs2015创建wpf程序会在引用里面多出3个核心程序集PresentationCore.PresentationFramework.WindowsBase.并且会在解决方案 ...
- C++ Primer Plus 第一章 预备知识
C++ Primer Plus 第一章 预备知识 知识点梳理 本章主要讲述了C++的由来,讨论了面向过程语言与面向对象语言的区别,介绍了ANSI/ISO制定的C++标准,阐述了在Windows.Mac ...
- 《openssl编程》:第一章基础知识
第一章 基础知识 1.1 对称算法 对称算法使用一个密钥.给定一个明文和一个密钥,加密产生密文,其长度和明文大致相同.解密时,使用读密钥与加密密钥相同. 对称算法主要有四种加密模式: (1) 电子密码 ...
- ASP.NET自定义控件组件开发 第一章 第三篇 第一章的完结篇
ASP.NET自定义控件组件开发 第一章 第三篇 第三篇:第一章的完结篇 系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 ...
- Python第一章-基础知识
第一章:基础知识 1.1 安装python. 直接官网下载最新的python然后默认安装就可以了,然后开始菜单里找到pyhton *.*.* Shell.exe运行python的交互shell ...
- Java语言程序设计(基础篇)第一章
第一章 计算机.程序和Java概述 1.1 引言 什么是程序设计呢? 程序设计就是创建(或者开发)软件,软件也称为程序. 1.2 什么是计算机 计算机是存储和处理数据的电子设备,计算机包括硬件(har ...
- 【学习记录】第一章 数据库设计-《SQL Server数据库设计和开发基础篇视频课程》
一.课程笔记 1.1 软件开发周期 (1)需求分析阶段 分析客户的业务和数据处理需求. (2)概要设计阶段 设计数据库的E-R模型图,确认需求信息的正确和完整. /* E-R图:实体-关系图(Ent ...
- 嵌入式学习笔记(综合提高篇 第一章) -- 利用串口点亮/关闭LED灯
1 前言 从踏入嵌入式行业到现在已经过去了4年多,参与开发过的产品不少,有交换机.光端机以及光纤收发器,停车场出入缴费系统,二维码扫码枪,智能指纹锁以及数字IC芯片开发等; 涉及产品中中既有 ...
随机推荐
- Python3+BaiduAI识别高颜值妹子图片
一.在百度云平台创建应用 为什么要到百度云平台创建应用,首先来说是为了获取获取access_token时需要的API Key和Secret Key 至于为什么需要API Key和Secret Key才 ...
- CentOS中/英文环境切换教程(CentOS6.8)
一.前言 对于不习惯英文的人可能想将系统由英文转成中文:而对于考虑客户端如果没正确配置,中文目录可能显示为乱码的人则可能宁愿将系统由中文转成英文. 中文切换为英文,实际就是将LANG的值由zh_CN- ...
- js 鼠标滚动 禁用 启用
function disabledMouseWheel() { var div = document.getElementById('divid'); if (div.addEventListener ...
- Oracle中如何查询一个表的所有字段名和数据类型
Oracle中如何查询一个表的所有字段名和数据类型 查询语法 select A.COLUMN_NAME,A.DATA_TYPE from user_tab_columns A where TABLE_ ...
- 回声TCP服务器端/客户端
一.TCP服务端 1.TCP服务端的默认函数调用顺序 socket()创建套接字 bind()分配套接字地址 listen()等待请求连接状态 accept()允许连接 read()/write()数 ...
- python settings :RROR 1130: Host 'XXXXXX' is not allowed to connect to this MySQL server
pymysql.err.InternalError: (1130, u"Host '127.0.0.1' is not allowed to connect to this MySQL se ...
- 学习笔记-AngularJs(四)
之前学习的事视图与模版,我们在控制器文件中直接定义一个数组,让其在模版文件中用ng-repeat指令构造一个迭代器,定义的数组http://t.cn/RUbL4rP如同以下: $scope.phone ...
- LY.JAVA面向对象编程.修饰符
2018-07-18 09:20:25 /* 修饰符: 权限修饰符:private,默认的,protected,public 状态修饰符:static,final 抽象修饰符:abstract 类: ...
- linux nginx 安装防火墙ngx_lua_waf
ngx_lua_waf是一款开源的 基于 ngx_lua的 web应用防火墙 github地址是 https://github.com/loveshell/ngx_lua_waf 安装流程如下 1 ...
- 如何破解Visual studio 2013
1.打开VS2013点击菜单栏中的帮助,选择注册产品. 2.如下图所示,你就可以看到你的VS是不是试用版了,很显然,现在我的还是试用版,还有20天的使用期限. 3.如下图所示,点击更改我的产品许可证. ...