zoukankan      html  css  js  c++  java
  • Mongodb 分享(一)

    Mongodb使用基础知识:

    一、简介

    1.mongodb是什么?

    1)MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

    MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的

    2)MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。它是文档型NosQL数据库

    3)组成:文档(document)——》集合(clooecton)——》数据库(database)

    2.   什么是NoSQL?

    NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。

    NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称

    NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

    3.为什么使用NoSQL ?

    今天我们可以通过第三方平台(如:Google,Facebook等)可以很容易的访问和抓取数据。用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些用户数据进行挖掘,那SQL数据库已经不适合这些应用了, NoSQL数据库的发展也却能很好的处理这些大的数据。

    参考链接:https://blog.csdn.net/hsd2012/article/details/51279472

    另外:

    “_id”:每一个文档都有一个特殊的键“_id”,在所属集合中唯 一。

    自带JavaScript shell,用于管理MongoDB的实例或数据操作。

    文档:“键:值”

    键:字符串(键不能含  空字符 $)

    值:多种不同数据类型,(整数、字符串、文档、)

    区分:区分类型,区分大小写。

    注:文档不能有重复的键。文档中的键值对是有序的。

    集合:一组文档,可以看作是一个拥有动态模式(dynamic schema)的表。

    动态模式:一个集合中的文档可以是各种各样的。

    {“greeting”:”Hello, world”}

    {“foo”:5}

    值类型不同,且键也完全不同的两个文档,可以放在同一个集合中。

    问:还有必要使用多个集合吗?

    查询速度、数据更集中、创建索引。

    所以,一个集合中只放入一种类型的文档。尽管mongodb没有强制要求。

    命名:不能包含 (“”、、system开头、$、)

    数据库:多个集合组成数据库

     命名:不能是空字符串(“”)

              不得含有 /.”*<>:|?$(基本上只能使用ASCII中的字母和数字)

              库名区分大小写

              库名最多为64字节。

              保留库名(admin local  config)

     

     

     

    3)mongodb 客户端:NoSQL Manager for MongoDB 使用实操

    (1)mongodb查询:find  pretty findOne

    “电子书”and or  >gt >=gte <lt <=lte  != ne  limit skip sort count

    注: skip和limit, 当两者一起使用的时候, 不管其位置顺序,默认先skip,再limit。

    (2)) 获取当前表的索引

    Db.postjson.getIndexes();

    加索引的代价:每次写操作时会耗费多的时间,占用更多的磁盘空间

    通常一个特定集合,不建议有两个以上的索引。

    (3) 查询指定字段 https://www.cnblogs.com/wuxiang/p/5553658.html

    二、案例介绍:华住价格推送项目

          1)项目简介

    2python + mysql + mongodb

    3)纠结过的点

          1. 五个脚本同时写一个EXCEL表的不同sheet页,会有问题吗?

          2. 定时任务运行,自动生成EXCEL

          3. 汇总信息的生成为什么要和明细信息一起,另起一个脚本读EXCEL汇总不好吗?

          4. 如果我的脚本执行过程当中,报数据库连不上的错误了,咋办?

          5. mongodb存的带时区的时间为啥与我们的时间有8小时的时差。

          6.mongodb中取数据时发何利用索引,正确的思路是什么?121万条数据。

          7.写伪代码的重要性,日志的重要性。

          8.与数据库的交互越少越好,一次性取出来,python脚本来处理,性能好些。

          9.python查询mongodb语句参数化的问题。Json对象等同于python代码,直接参数化即可。里面不是字符串是个json对象。

    10 种like '%     %'  这里面的关键字的占位符这样写对不对?

    %%%s%%% 见图片

    11 不足的:关于抽象。关于异常。排错时,分解分解再分解,面向对象,找对象。

    12. 多行注释报语法错误:原因:多行注释也要注意缩进,python对缩进要求严格。注释符的缩进Ok了,就不报错了。

    13. 特别想知道mysqlmongodbkafka edis的区别和使用场景

    上次讲的:查询、条件操作符 (大于、小于、大于等于、小于等于、不等于,$type

    $type$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。

    BSON类型

    https://blog.csdn.net/leshami/article/details/52668870

    https://www.runoob.com/mongodb/mongodb-operators-type.html

                                                                                                                                                 

    聚合:aggregate    管道聚合:pipeline aggregate

    1.     group by

    db.postjson.aggregate([{$group:{_id:"$bwHotelID",reviewcnt:{$sum:1}}}]);

    这里的$sum:1  相当于count(*)    要对某个字段进行sum 应写成 $sum : “$字段名

     

    2.     group by + where

    db.postjson.aggregate([{$group:{_id:"$bwHotelID",reviewcnt:{$sum:1}}},{$match:{bwHotelID:284500}}]);
    db.postjson.aggregate([{$group:{_id:"$bwHotelID",reviewcnt:{$sum:1}}},{$match:{_id:160733}}]);
    db.postjson.aggregate([{$match:{bwHotelID:160733}}]);

    这里的$match就相当于sql语法中的where

     

    3.     group by + 字段筛选

    db.postjson.aggregate([{$group:{_id:"$bwHotelID",reviewcnt:{$sum:1}}},{$project:{_id:0,reviewcnt:1}}]);

    db.postjson.aggregate([{$group:{_id:"$bwHotelID",reviewcnt:{$sum:1}}},{$project:{_id:0,reviewcnt:1}},{$match:{reviewcnt:4}}]);
    db.postjson.aggregate([{$group:{_id:"$bwHotelID",reviewcnt:{$sum:1}}},{$project:{_id:0,reviewcnt:1}},{$match:{reviewcnt:{$ne:4}}}]);   
    条件操作符在match中仍然可以用。 $gt  $lt  $gte  $lte  $ne

     

     

    4 group by + where + 字段筛选 + having

        

    4.     sum

    5.     avge

    6.     min

    7.     max

    8.     push 在结果文档中插入值至一个数组

    9.     addToSet

    10. first

    11. last

     

    管道聚合:   语法:db.collection.aggregate(pipeline, options)

    1) project  字段筛选

    2) match     where

    3) limit       limit

    4) skip       skip

    5) unwind

    6) group      group by     $group语法: { $group: { _id: <expression>, <field1>: { <accumulator1> : <expression1> }, ... } }

    7) sort       order by

    8) geoNear

    https://blog.csdn.net/congcong68/article/details/51619882

    https://blog.csdn.net/congcong68/article/details/51620040

    注:group: 如果_idnull  相当于select  count(*) from table

     

  • 相关阅读:
    2.5 tensorflow2.3--变量Variable声明和初始化
    2.4 tensorflow 2.3学习--- 矩阵
    2.3 tensorflow 2.3学习--向量
    C++11最新特性总结
    c++多态和虚函数表实现原理
    Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理
    Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理9
    Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理7
    Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理5
    Vue快速学习_第一节
  • 原文地址:https://www.cnblogs.com/yoyoma0355/p/9606057.html
Copyright © 2011-2022 走看看