MongoDB数据的使用

mongodb的基础使用。


NoSQL简介:

概述:

NoSQL,全名为 not only sql ,指的是非关系型的数据库随着访问量的上升,网站的数据库性能出现了问题,于是nosql被设计出来

优点:

高可扩展性

分布式计算

低成本

架构的灵活性,半结构化数据

没有复杂的关系

缺点:

没有标准化

有限的查询功能

最终一致是不直观的程序

一、MongoDB:

什么是MongoDB?

  1. MongoDB是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统,在高负载的情况下,可以添加更多结点,可以保证服务器的性能。
  2. MongoDB为web应用提供了高性能的数据存储解决方案。
  3. MongoDB将数据存储为一个文档,数据结构由(key->value)形式组成,MongoDB文档类似于json文件,字段值可以是其他文档,列表等。
  • JSON文件:

存储数据的一种格式,

{} :代表字典

[] :列表

,  :数据分隔

:  :键值对

  • 特点:
  1. MongoDB提供了一个面向文档存储,基本思路是将原来的“行”的概念转换成了更加灵活的“文档”模型,一条记录可以表示非常复杂的层次关系。
  2. MongoDB支持丰富的查询表达式,查询指令是json形式的标记,可以轻易查询文档中嵌套的对象和列表。
  3. 非常容易扩展,扩展集群后还可以实现集群中数据的负载均衡。
  4. MongoDB支持各种编程语言,比如 python、 java、 c++ 、php、C#、ruby、JavaScript等
  5. 丰富的功能,包括索引、存储JavaScript、聚合、固定集合、文件存储等功能
  6.  
  • MongoDB的一些概念
  1. 与mysql术语的对比:
    1. database -> database 数据库
    2. table -> collection    数据库表/集合
    3. row -> document    
    4. column -> field
    5. index -> index
    6. table joins -> null
    7. primary key -> primary key
  2. 与mysql数据结构的对比
  3. 数据库
    1. 一个MongoDB中可以建立多个数据库
    2. MongoDB的单个实例可以容纳多个数据库,每一个都有自己的集合和权限,不同的数据库放在不同的文件中。(一般一个数据库就是一个文件)
    3. 数据库通过名字来标识,
        1. 不能是空字符串
        2. 不能含有:引号,空格,点,$ ,/ ,\ ,\0
        3. 全部小写
        4. 最多64字节
    4. 有一些数据库名是保留的,可以直接访问
        1. admin

从权限的角度考虑,这是“root”数据库,要是讲一个用户添加到这个数据库,这个用户自动继承所有数据库的权限,一些特定的数据库服务端的命令只能从这个数据库运行,比如:列出所有的数据库,关闭服务。

        1. local

这个数据库永远不会被复制,用来存储限于本地单台服务器的一些集合。

        1. config

当MongoDB用于分片设置时,config数据库在内部使用用于保存分片的相关数据。

  1. 文档
    1. 概念:

文档是MongoDB中最核心的概念,是其核心单元,将文档类比成关系型数据库中的每一行数据

多个键及其关联的值 有序 的放在一起就是文档,MongoDB使用了Bson数据结构来存储数据和网络数据交换。

Bson数据可以理解为在JSON的基础上添加了一些json没有的数据类型

    1. 例子:

 

    1. 文档的命名规范:
        1. 键不能含有\0,$,
        2. 以下划线开头的键都是保留的。
    2. 注意事项:
        1. 文档中的键值对是有序的
        2. 文档中的值可以是列举的数据类型的值,甚至是另一个文档
        3. MongoDB区分大小写和类型
        4. 文档中的键不能重复
        5. 文档中的键一般是字符串
  1. 集合

类比mysql中的表,集合是就是一组文档的组合

在MongoDB中集合是无模式的,也就是说集合中存储的文档的集合可以不同。

注意:当第一个文档插入时,集合就会被自动创建。

  1. 命名规则:
  1. 集合名不能是字符串
  2. 不能含有:引号,空格,点,$ ,/ ,\ ,\0
  3. 不能以system. 开头,这是为系统集合保留的前缀
  4. 集合的名字不能含有保留字符
  • mongodb操作数据库
  1. 创建数据库

格式: use 数据库名

注意:如果不存在,则创建数据库,否则切换到指定数据库

  1. 查看所有数据库

格式:show dbs

注意:如果刚刚创建的数据库不再列表内,并不代表没有创建,而是因为数据中没有数据而不显示。如果要显示需要给数据库中插入一些数据。

  1. 查看当前使用的数据库

格式:db 或者 db.getName()

  1. 删除数据库

说明:当前正在使用哪个数据库则删除哪个数据库,db代表当前正在使用的数据库。

格式:db.dropDatebase()

  1. 断开链接

exit

  1. 查看API

help

  • 操作集合
  1. 查看当前数据库下的所有集合

show collections

  1. 创建集合
        1. db.createCollection(“集合名”)
        2. db.集合名称.insert(文档)

区别:第一种,创建一个空集合。第二种方法创建一个空集合后并向集合中添加一个文档。

  1. 删除集合

db.集合名称.drop()

  • 操作文档
        1. insert()

db.集合名称.insert(文档)

添加一个:db.student.insert({“name”:”tom1”,”age”:”18”})

添加多个:db.student.insert(

[

{“name”:”tom2”,”age”:”18”},{“name”:”tom1”,”age”:”18”},

{“name”:”tom3”,”age”:”18”}]

)

 

        1. save()

db.集合名称.save(文档)

注意:如果不指定_id字段save()方法类似于insert()字段,如果指定_id字段,则会更新改_id字段的数据库。

        1.  
        1. remove()

db.集合名称.remove(

<query>,

{

justOne:<boolean>,

writeConcern:<document>

}

)

参数说明:

query:可选,删除的文档的条件

justOne:可选,如果为true,则只删除一条,如果为flase 则删除所有匹配的。

writeConcern:可选,抛出异常的级别

        1. update():用于更新已经存在的文档

db.集合名称.update(

<query>,

<update>,

{

upser:<boolean>,

multi:<boolean>,

writeConcern:<document>

}

)

参数说明:

query: update 的查询条件,类似mysql中update后面的where后面的条件语句。

update:

一些更新的操作,$set表示设置、$inc表示叠加

upset:可选参数,如果不存在update的记录,是否插入该数据,true为插入,默认为flase不插入

multi:可选,默认为false,只更新找到的第一条数据,如果为true,则更新所有匹配的文档

writeConcern:可选,抛出异常的级别

        1. save():通过传入的文档替换已有的文档

db.集合名称.save(

<document>,

{

writeConcern:<document>

}

)

        1. 查询文档

find()

db.集合名称.find()

查询集合中的所有文档数据。

db.集合名称.find(

{

queryWhere

},

{

key1:1/0,

key2:1/0,

……

}

)

参数说明:

queryWhere:查询条件

key: 要显示的字段,1表示显示

pretty()

以格式化的方式来显示文档。

db.student.find().pretty()

findOne()

匹配结构的第一条数据

db.student.findOne()

 

        1. 查询条件操作符

db.集合名称.find({key:{操作符:值}})

>       $gt

>=      $gte

<       $lt

<=      $lte

db.student.find({age:{$gt:30}})

联合使用 >= 与<=

db.student.find({age:{$gte:30,$lte:50}})

== 直接:

使用_id进行查询

db.集合名称.find({“_id”:ObjectId(“id值”)})

查询某个结果集的数据条数

db.student.find({age:{$gte:30,$lte:50}}).count()

查询某个字段中是否包含另一个值。

db.集合名称.find({key:/value/})

db.student.find({key:/aaa/})

查询某个字段是否以另一个值开头

db.集合名称.find({key:/^value/})

db.student.find({key:/^tom/})

        1. 查询条件and和or

and:

  1. find()中出入多个键,每个键以逗号隔开

db.student.find({name:”tom3”,age:7})

or:

db.集合名称.find(

{$or:[

{key1:value1},

{key2:value2},

……

]

}

)

db.student.find({$or:[{age:20},{age:30}]})

and与or联合使用:

db.集合名称.find(

{

key1:value1,

key2:value2,

$or:[

{key1:value1},

{key2:value2},

]

}

)

        1. limit和skip

limit():读取指定数量的记录

db.student.find().limit(5)

skip():跳过指定数量的数据

db.student.find().skip(5)

分页的实现,

 

        1. 排序

db.集合名称.find().sort({key:1})

参数key:排序的字段 后边值为1以升序排列 -1表示降序。

  • 代码操作MongoDB

pip install pymongo(哪里写代码 哪里写)

from pymongo import MongoClient

conn = MongoClient("xuaman.top",27017)#连接到我们要连接的远程服务器

db = conn.student#得到数据库操作对象

collection = db.student#得到集合的操作对象



collection.insert(

    [{"name":"xiaoha2","age":"18"},

    {"name": "xiaoha3", "age": "26"},

    {"name": "xiaoha3", "age": "27"},

    {"name": "xiaoha4", "age": "33"},

    {"name": "xiaoha5", "age": "62"},

    {"name":"xiaoha6","age":"57"},

    {"name":"xiaoha7","age":"41"},

    {"name": "xiaoha8", "age": "18"},

    {"name": "xiaoha9", "age": "26"},

    {"name":"xiaoha10","age":"25"},

    {"name":"xiaoha11","age":"35"}

    ]

                  )

conn.close()

  1. from pymongo import MongoClient
    #链接服务器
    conn = MongoClient("xuaman.top", 27017)
    #链接数据库
    db = conn.axf
    #获取集合
    collection = db.student
    collection.remove({
    "name":"lilei"})
    #断开链接
    conn.close()
     

  2. from pymongo import MongoClient
    #链接服务器
    conn = MongoClient("xuaman.top", 27017)
    #链接数据库
    db = conn.axf
    #获取集合
    collection = db.student
    collection.update({
    "name":"lilei"},{"$set":{"age":20}})
    #断开链接
    conn.close()

  3. from pymongo import MongoClient
    import pymongo
    from bson.objectid import ObjectId
    #链接服务器
    conn = MongoClient(“xuaman.top”", 27017)
    #链接数据库
    db = conn.axf
    #获取集合
    collection = db.student
    # 查询所有
    # res = collection.find()
    # print(res)
    # print(type(res))
    # for stu in res:
    #     print(stu, type(stu))
    #
    查询部分
    # res = collection.find({"age":{"$gt":40}})
    # for stu in res:
    #     print(stu)
    #
    统计查询
    # print(collection.find({"age":{"$gt":40}}).count())
    #
    排序
    # res = collection.find().sort("age", pymongo.DESCENDING)
    # for stu in res:
    #     print(stu)
    #
    分页相关
    # res = collection.find().limit(5)
    # for stu in res:
    #     print(stu)
    # _id
    查询
    print(collection.find_one({"_id":ObjectId('5b865c3b8ad03c4c28e530ee')}))
    #断开链接
    conn.close()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值