mongodb简介

mongodb

NoSQL简介

NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL",指的是非关系型的数据库

  • 代表着不仅仅是SQL
  • 没有声明性查询语言
  • 没有预定义的模式
    -键 - 值对存储,列存储,文档存储,图形数据库
  • 最终一致性,而非ACID属性
  • 非结构化和不可预知的数据
  • CAP定理 (一致性(Consistency) ,可用性(Availability) ,分隔容忍(Partition tolerance))
  • 高性能,高可用性和可伸缩性

MongoDB简介

  • MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
  • MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

MongoDB 概念解析

sql mongodb
table collection 表/集合
row document 行/文档
column field 字段/域
primary_key primary_key MongoDB自动将_id字段设置为主键

数据库

  • 一个mongodb中可以建立多个数据库。
  • MongoDB的默认数据库为"db",该数据库存储在data目录中。
  • MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。
  • "show dbs" 命令可以显示所有数据的列表。
  • 执行 "db" 命令可以显示当前数据库对象或集合。
  • 运行"use"命令,可以连接到一个指定的数据库。

文档

  • 文档是一组键值(key-value)对(即BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。

一个简单的文档例子如下:

{"site":"www.runoob.com", "name":"菜鸟教程"}

集合

  • 集合就是 MongoDB 文档组,类似于 RDBMS (关系数据库管理系统:Relational Database Management System)中的表格。
  • 集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。
  • 当第一个文档插入时,集合就会被创建。
  • 数据库不允许进行删除。使用drop()方法删除collection所有的行。

MongoDB 创建数据库

  • 创建数据库
use test
  • 如果你想查看所有数据库,可以使用 show dbs 命令:
show dbs

结果:

admin   0.000GB
config  0.000GB
local   0.000GB

可以看到,我们刚创建的数据库 test 并不在数据库的列表中, 要显示它,我们需要向 test 数据库插入一些数据

db.test.insert({"name":"菜鸟教程"})
show dbs

显示:

admin   0.000GB
config  0.000GB
local   0.000GB
test    0.000GB
  • MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。

  • 在 MongoDB 中,集合只有在内容插入后才会创建! 就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。

MongoDB 删除数据库

show dbs
use test
db.dropDatabase()
show dbs

结果:

admin   0.000GB
config  0.000GB
local   0.000GB

创建集合

use test
db.createCollection("runoob")
  • 如果要查看已有集合,可以使用 show collections 命令:
  • 在 MongoDB 中,你不需要创建集合。当你插入一些文档时,MongoDB 会自动创建集合。

删除集合

db.runoob.insert({'d':'333333'})
db.runoob.drop()

MongoDB 插入文档

db.COLLECTION_NAME.insert(document)
  • 以下文档可以存储在 MongoDB 的 runoob 数据库 的 col 集合中:
>db.col.insert({title: 'MongoDB 教程', 
    description: 'MongoDB 是一个 Nosql 数据库',
    by: '菜鸟教程',
    url: 'http://www.runoob.com',
    tags: ['mongodb', 'database', 'NoSQL'],
    likes: 100
})

以上实例中 col 是我们的集合名,如果该集合不在该数据库中, MongoDB 会自动创建该集合并插入文档。

  • 文档执行两次插入操作

使用 find() 函数查询数据:

db.col.find()

显示:

{ "_id" : ObjectId("56066169ade2f21f36b03137"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
{ "_id" : ObjectId("5606616dade2f21f36b03138"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
db.col.find().pretty()#美观

显示:

{
       "_id" : ObjectId("5b7f7357c98c3333acf4e0e5"),
       "title" : "MongoDB 教程",
       "description" : "MongoDB 是一个 Nosql 数据库",
       "by" : "菜鸟教程",
       "url" : "http://www.runoob.com",
       "tags" : [
               "mongodb",
               "database",
               "NoSQL"
       ],
       "likes" : 100
}
{
       "_id" : ObjectId("5b7f735fc98c3333acf4e0e6"),
       "title" : "MongoDB 教程",
       "description" : "MongoDB 是一个 Nosql 数据库",
       "by" : "菜鸟教程",
       "url" : "http://www.runoob.com",
       "tags" : [
               "mongodb",
               "database",
               "NoSQL"
       ],
       "likes" : 100
}

接下来我们移除 title 为 'MongoDB 教程' 的文档:

db.col.remove({'title':'MongoDB 教程'})
db.col.find()

没数据显示了,两条数据全删除了

  • 如果你只想删除第一条找到的记录可以设置 justOne 为 1,如下所示:
db.col.remove({'title':'MongoDB 教程'},1)
db.col.find().pretty()

显示

{
        "_id" : ObjectId("5b7f74e6c98c3333acf4e0e8"),
        "title" : "MongoDB 教程",
        "description" : "MongoDB 是一个 Nosql 数据库",
        "by" : "菜鸟教程",
        "url" : "http://www.runoob.com",
        "tags" : [
                "mongodb",
                "database",
                "NoSQL"
        ],
        "likes" : 100
}

即只删除掉一条数据

MongoDB 删除文档

db.collection.remove(
   <query>,
   <justOne>
)

MongoDB 查询文档

db.collection.find(query, projection)
原文地址:https://www.cnblogs.com/monkey-moon/p/9544497.html