Mongodb基础

数据库和集合基本操作

MongoDB 简介

简介

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 json 的 bson 格式,因此可以存储比较复杂的数据类型。

面向集合的存储

在 MongoDB 中,一个数据库包含多个集合,类似于 MySQL 中一个数据库包含多个表;一个集合包含多个文档,类似于 MySQL 中一个表包含多条数据。

虚拟机开机配置

启动 MongoDB 服务,因为 MongoDB 并不随系统一起启动,可能以下命令运行后会等一小段的时间才会启动完毕。

$ sudo service mongodb start
进入 MongoDB 命令行操作界面(可能会出现 connect failed,多试几次就行),在命令行中敲exit可以退出。

$ mongo
实验中的布尔类型的 ture 用1代替,false 用0代替。

基本概念

数据库

一个 MongoDB 可以创建多个数据库
使用 show dbs 可以查看所有数据库的列表
执行 db 命令则可以查看当前数据库对象或者集合
运行 use 命令可以连接到指定的数据库

$ mongo      #进入到mongo命令行
> use test            #连接到test数据库
注意:数据库名可以是任何字符,但是不能有空格、点号和$字符

文档

文档是 MongoDB 的核心,类似于 SQLite 数据库(关系数据库)中的每一行数据。多个键及其关联的值放在一起就是文档。在 Mongodb 中使用一种类 json 的 bson 存储数据,bson 数据可以理解为在 json 的基础上添加了一些 json 中没有的数据类型。

例:

{"company":"Chenshi keji"}

文档的逻辑联系

假设有两个文档:

{
   "name": "Tom Hanks",
   "contact": "987654321",
   "dob": "01-01-1991"
}#user文档

{
   "building": "22 A, Indiana Apt",
   "pincode": 123456,
   "city": "chengdu",
   "state": "sichuan"
}#address文档
  1. 关系1:嵌入式关系,把 address 文档嵌入到 user 文档中
{
   "name": "Tom Hanks",
   "contact": "987654321",
   "dob": "01-01-1991",
   "address":
   [{
   "building": "22 A, Indiana Apt",
   "pincode": 123456,
   "city": "chengdu",
   "state": "sichuan"
    },
    {
    "building": "170 A, Acropolis Apt",
    "pincode": 456789,
    "city": "beijing",
    "state": "beijing"
    }]
}#这就是嵌入式的关系
  1. 关系2:引用式关系:将两个文档分开,通过引用文档的_id字段来建立关系
{
   "contact": "987654321",
   "dob": "01-01-1991",
   "name": "Tom Benzamin",
   "address_ids": [
      ObjectId("52ffc4a5d85242602e000000")    #对应address文档的id字段
   ]
}#这就是引用式关系

集合

集合就是一组文档的组合,就相当于是关系数据库中的表,在 MongoDB 中可以存储不同的文档结构的文档。 例:

{"company":"Chenshi keji"} {"people":"man","name":"peter"}

上面两个文档就可以存储在同一个集合中。

元数据

数据库的信息存储在集合中,他们统一使用系统的命名空间:DBNAME.system.* DBNAME 可用 db 或数据库名替代

  • DBNAME.system.namespaces :列出所有名字空间
  • DBNAME.system.indexs :列出所有索引
  • DBNAME.system.profile :列出数据库概要信息
  • DBNAME.system.users :列出访问数据库的用户
  • DBNAME.system.sources :列出服务器信息

数据库的创建和销毁

创建数据库

启动服务后,进入 MongoDB 命令行操作界面:

$ mongo
使用 use 命令创建数据库:

> use mydb
查看当前连接的数据库:

> db
查看所有的数据库:

> show dbs
列出的所有数据库中看不到 mydb 或者显示 mydb(empty) ,因为 mydb 为空,里面没有任何东西,MongoDB 不显示或显示 mydb(empty)

销毁数据库

使用 db.dropDatabase() 销毁数据库:

> use local
 switched to db local
> db.dropDatabase()
查看所有的数据库:

> show dbs

集合(collection)的创建和删除

创建集合

在数据库 mydb 中创建一个集合
语法:

db.createCollection(name,options)

参数描述:

name:创建的集合名称
options:是一个作为初始化的文档(可选)
范例:

db.createCollection(“shiyanlou”) #无参数
{ “ok” : 1 }
show collections
shiyanlou
system.indexes
db.createCollection(“shiyanlou2”, { capped : 1, autoIndexID : 1, size : 6142800, max : 10000 } ) #带参数
{ "ok ": 1 }
参数描述:

capped:类型为 Boolean,如果为 true 则创建一个固定大小的集合,当其条目达到最大时可以自动覆盖以前的条目。在设置其为 true 时也要指定参数大小;
autoIndexID:类型为 Boolean,默认为 false,如果设置为 true,则会在 _id field.s 上自动创建索引;
size:如果 capped 为 true 需要指定,指定参数的最大值,单位为 byte;
max:指定最大的文档数。 在 Mongodb 中也可以不用创建集合,因为在创建文档的时候也会自动的创建集合。

> use mydb
switched to db mydb
> db.createCollection("users")
查看创建的集合:

> show collections

删除集合

删除集合的方法如下:(删除 users 集合)

> show collections
> db.users.drop()
查看是否删除成功:

> show collections

向集合中插入数据

使用 insert()

插入数据时,如果 users 集合没有创建会自动创建。

> use mydb
switched to db mydb
> db.users.insert([
... { name : "jam",
... email : "jam@qq.com"
... },
... { name : "tom",
... email : "tom@qq.com"
... }
... ])

使用 save()

插入数据时,如果 users 集合没有创建会自动创建。

> use mydb2
switched to db mydb2
> db.users.save([
... { name : "jam",
... email : "jam@qq.com"
... },
... { name : "tom",
... email : "tom@qq.com"
... }
... ])

总结

show dbs 可以查看有哪些数据库

dropDatabase 可以删除数据库

createCollection 可以创建集合

show collections 可以查看集合

insert() 和 save() 可以插入数据。

mongodb insert()和save()的相同点和区别

区别
若新增的数据中存在主键 ,insert() 会提示错误,而save() 则更改原来的内容为新内容。

如:

已存在数据:  {_id : 1, " name " : " n1 " },再次进行插入操作时,


insert({_id : 1, " name " : " n2 " })    会报主键重复的错误提示

save({ _id : 1, " name " : " n2 " })     会把 n1 修改为  n2  。

相同点:
若新增的数据中没有主键时,会增加一条记录。

已存在数据:  { _id : 1, " name " : " n1 " },再次进行插入操作时,

insert({ " name " : " n2 " })    插入的数据因为没有主键,所以会增加一条数据

save({  " name " : " n2 " })   增加一条数据。

数据查询

2.1 查询语句

find() 用法:db.COLLECTION_NAME.find()查询数据

不加任何参数默认返回所有数据记录:

> db.post.find()

pretty() 可以使查询输出的结果更美观。

> db.post.find().pretty()

2.2 MongoDB 中的 AND

当 find() 中传入多个键值对时,MongoDB 就会将其作为 AND 查询处理。用法:

db.mycol.find({ key1: value1, key2: value2 }).pretty()

2.3 MongoDB 中的 OR

MongoDB 中,OR 查询语句以 $or 作为关键词,用法如下:

> db.post.find(
   {
      $or: [
         {key1: value1}, {key2:value2}
      ]
   }
).pretty()

2.4 同时使用 AND 和 OR

操作范例:

> db.post.find({
    "likes": {$gt:10},
    $or: [
        {"by": "shiyanlou"},
        {"title": "MongoDB Overview"}
    ]
}).pretty()
{$gt:10} 表示大于10,另外,$lt 表示小于,$lte 表示小于等于,$gte 表示大于等于,$ne 表示不等于。

拓展阅读


pymongodb

官方文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值