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的实例或数据操作。

文档:“键:值”

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

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

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

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

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

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

{“greeting”:”Hello, world”}

{“foo”:5}

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

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

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

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

命名:不能包含 (“”、\0、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)项目简介

2)python + 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. 特别想知道mysql\mongodb\kafka\redis的区别和使用场景 。

上次讲的:查询、条件操作符 (大于、小于、大于等于、小于等于、不等于,$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: 如果_id为null  相当于select  count(*) from table

Mongodb 分享(一)的更多相关文章

  1. mongodb分享(二)

    上次讲的:查询find\findone\pretty.条件操作符 (大于.小于.大于等于.小于等于.不等于,$type).limit\skip.sort.Db.postjson.getIndexes( ...

  2. MongoDB,HDFS, Spark to 电影推荐

    http://www.infoq.com/cn/news/2014/12/mongdb-spark-movie-recommend MovieWeb是一个电影相关的网站,它提供的功能包括搜索电影信息. ...

  3. MongoDB基础教程系列--第一篇 进入MongoDB世界

    1.什么是MongoDB MongoDB是跨平台的.一个基于分布式文件存储的数据库.由C++语言编写.用它创建的数据库具备性能高.可用性强.易于扩展等特点.MongoDB将数据存储为一个文档,数据结构 ...

  4. MongoDB入门学习(1)

    什么是MongoDB ? MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB 旨在为WEB应用提供 ...

  5. MySQL与MongoDB的区别

    一.MongoDB简介 什么是MongoDB ?MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能.MongoDB 旨 ...

  6. MongoDB简介、特点、原理、使用场景、应用案例

    简介 MongoDB[1] 是一个基于分布式文件存储的数据库.由C 语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB[2] 是一个介于关系数据库和非关系数据库之间的产品, ...

  7. mongodb什么时候使用

    转自:https://blog.csdn.net/justlpf/article/details/80392944 简介 MongoDB[1] 是一个基于分布式文件存储的数据库.由C 语言编写.旨在为 ...

  8. 01 . MongoDB简介及部署配置

    简介 什么是MongoDB? MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB 旨在为WEB应用 ...

  9. 别老扯什么Hadoop了,你的数据根本不够大

    本文原名“Don't use Hadoop when your data isn't that big ”,出自有着多年从业经验的数据科学家Chris Stucchio,纽约大学柯朗研究所博士后,搞过 ...

随机推荐

  1. phpstorm中设置代码上传到github

    参考: https://blog.csdn.net/Knight_quan/article/details/54894691 https://www.300168.com/biancheng/show ...

  2. C语言实现随机生成0或1

    rand函数在产生随机数前,需要系统提供的生成伪随机数序列的种子,rand根据这个种子的值产生一系列随机数.如果系统提供的种子没有变化,每次调用rand函数生成的伪随机数序列都是一样的.srand(u ...

  3. 【python--函数解读】

    1.strip()函数:用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列(包括'\n', '\r',  '\t',  ' ') 注意: 该方法只能删除开头或是结尾的字符,不能删除中间部分的 ...

  4. 如何在Framework中读取bundle中的Res

    前因: 因为公司上架前后的原因,外围的平台层部分提前上线,而我做的功能部分需要晚一些上线,是单独的一个工程在其他仓库开发. 我的资源文件放在Bundle中.合到主工程中,资源文件不用改,直接拖进去.倒 ...

  5. topcoder srm 692 div1 -23

    1.给定一个带权有向图.选出一些边满足使得任意两点可相互到达的前提下使得选出的边的权值的最大最小差值最小. 思路:二分答案,然后枚举权值的范围判断是否可行. #include <stdio.h& ...

  6. DPAA1是如何辅助cpu进行网络加速的?

    1.为何会出现DPAA1? 1.1 如果没有多核处理器的出现可能就不会出现这个东东了! 1.2 怎么会跟多核处理器扯上关系呢? 1.2.1 先聊聊单核处理器会怎么处理网络包呢? 单核同一时刻只能处理一 ...

  7. 题解——CodeForces 438D The Child and Sequence

    题面 D. The Child and Sequence time limit per test 4 seconds memory limit per test 256 megabytes input ...

  8. Docker7之Docker overview

    Docker is an open platform for developing, shipping, and running applications. Docker enables you to ...

  9. EM算法——Expectation-Maximization

    最大似然估计 一个栗子:假如去赌场,但是不知道能不能赚钱,你就在门口堵着出来一个人就问一个赚了还是赔了,如果问了5个人都说赚了,那么你就会认为,赚钱的概率肯定是非常大的. 已知:(1)样本服从分部的模 ...

  10. Vue--获取数据

    一.Jsonp抓取数据 用 npm 安装 jsonp npm install jsonp 创建 jsonp.js import originJsonp from 'jsonp' export defa ...