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. JVM内存结构之堆、栈、方法区以及直接内存、堆和栈区别

    JVM内存结构之堆.栈.方法区以及直接内存.堆和栈区别 一.  理解JVM中堆与栈以及方法区 堆(heap):FIFO(队列优先,先进先出):二级缓存:*JVM中只有一个堆区被所有线程所共享:对象和数 ...

  2. ERROR! The server quit without updating PID file (/application/mysql-5.6.40/data/db01-51.pid).

    centos7.5 安装mysql数据库报错 问题: [root@db01-51 scripts]# /etc/init.d/mysqld start Starting MySQL.Logging t ...

  3. pillow生成验证码

    1.结果 2.安装pillow cmd里进入python,pip install pillow,需要等一段时间 3.代码 from PIL import Image, ImageDraw, Image ...

  4. 赞 ( 84 ) 微信好友 新浪微博 QQ空间 180 SSD故事会(14):怕TLC因为你不了解!【转】

    本文转载自:https://diy.pconline.com.cn/750/7501340.html [PConline 杂谈]从前,大家谈TLC色变:如今,TLC攻占SSD半壁江山.是的,这个世界就 ...

  5. bzoj 3437 小p的农场

    bzoj 3437 小p的农场 思路 \(f[i]=min(f[j]+\sum\limits_{k=j+1}^{i}{b[k]*(i-k)}+a[i])\) \(f[i]=min(f[j]+\sum\ ...

  6. FJUT seventh的tired树上路径(01字典树)题解

    思路(来自题解): 众所周知树上两个点xy的距离是deep[x]+deep[y]-deep[lca(x,y)]*2 然后我们把这个加减法换成异或,我们就会发现,deep[lca(x,y)]被消掉了 所 ...

  7. P4492 [HAOI2018]苹果树

    思路 题目要求的其实就是每种方案的权值之和(因为每种方案的概率相等) 所以自然想到要求所有的边对最终答案的贡献次数 考虑这一条边被经过了多少次,有这个子树内的点数*子树外的点数次,即\(k\times ...

  8. Graph Convolutional Networks (GCNs) 简介

    Graph Convolutional Networks 2018-01-16  19:35:17 this Tutorial comes from YouTube Video:https://www ...

  9. (转) The care and maintenance of your adviser

    The care and maintenance of your adviser Ever since the advent of graduate school, students have com ...

  10. Unsupervised Image-to-Image Translation Networks --- Reading Writing

    Unsupervised Image-to-Image Translation Networks --- Reading Writing 2017.03.03 Motivations: most ex ...