一般来说,mongodb不应该用于复杂的多表查询、统计报表,主要用于简单的增删改查,例如各种日志和结构易变的管理信息。在oracle 12c称为主流、或使用了postgresql时,就没有太大必要使用mongodb了。

发行版

https://www.mongodb.com/download-center?jmp=nav下载对应OS的版本,tar -xzvf解压

对于最新版本比如3.4,windows 7下可能回报api-ms-win-crt-runtimel1-1-0.dll。

和其他采用选举的架构一样,生产应该使用奇数个节点,例如3、5个(采用类paxos算法的都是如此)。

注:推荐percona版本。

其核心程序包括:

mongod:核心服务器程序

mongos:用于分片集群的控制器和查询路由器

mongo:客户端shell

主要的配套工具:

mongodump

mongorestore

bsondump

mongoimport

mongoexport

mongostat

mongotop

mongosniff

mongodb 指定配置文件

mongod --config /etc/mongo.conf

或:nohup mongod -f mongodb.cnf &

典型配置(单机)
[root@dev logs]# cat /etc/mongo.conf
port = 27017
dbpath = /usr/local/mongodb-linux-x86_64-rhel70-3.4.3/db
logpath = /usr/local/mongodb-linux-x86_64-rhel70-3.4.3/logs/mongo.log
smallfiles = true
directoryperdb = true # 初始化后不能修改
storageEngine = wiredTiger # 3.0后增加,默认为mmap
fork = true
logappend = true
journal = true

bind_ip=0.0.0.0 # 否则远程无法访问。

后台模式启动,建议配置文件设置,不是命令行
mongod --fork
指定日志文件,建议配置文件设置,不是命令行
mongod --logpath /logs/mongo.log
每个db一个目录,建议配置文件设置,不是命令行
mongod --logpath

mongodb停止

> use admin;
switched to db admin
> db.shutdownServer()
server should be down...

导入csv数据

mongoimport --type csv -d test -c postalCodes --headerline --drop pincodes.csv

类SQL分页查询(重点参考https://docs.spring.io/spring-data/mongodb/docs/2.0.14.RELEASE/reference/html/#mongo.query)

mongodb增删改查以及java for mongodb driver、spring mongodb data完全指南参考:

https://docs.spring.io/spring-data/mongodb/docs/2.0.14.RELEASE/reference/html/

http://mongodb.github.io/mongo-java-driver-reactivestreams/1.11/

http://mongodb.github.io/mongo-java-driver/3.10/driver/tutorials/bulk-writes/

http://mongodb.github.io/mongo-java-driver/3.10/javadoc/overview-summary.html

use spider;

-- find中第一部分查询条件,第二部分映射

db.stat.find({state:'Gujarat'}/*条件*/,{_id:0, city:1, state:1,pincode:1}/*查询字段*/).sort({city:1}).skip(10).limit(10)

-- 查询name="xxxx" or id=1的记录,返回name字段,以_id降序,返回第11-20行
db.userx.find({$or:[{name:"xxxxx"},{"id":1}]},{"name":1}).sort({"_id":-1}).limit(10).skip(10)

-- 更新列

db.userx.update({“id”:123},{$set:{"name","name123"}})

--删除列

db.userx.update({},{$unset:{"desc",""}})

条件操作符

支持大于$gt、大于等于$gte、小于$lt、小于等于$lte、in $in、not in $nin、正则表达式(也可以满足like)

db.userx.find({"_id":{"$gt":90,"$lt":95}}) -- 操作符写在条件里面

db.userx.find({"name":/(zjh|yidu)*/}) -- 操作符写在条件里面,查询name以zjh或yidu开头的记录

mongod --shutdown

集合重命名
db.log1.renameCollection('log')
查看集合的统计信息
db.log.stats()
查看db的统计信息
db.stats()

增加、删除字段

TTL自动删除文档

查看执行计划(这执行计划输出够繁琐的)

db.userx.find({$or:[{name:"xxxxx"},{"id":1}]},{"name":1}).sort({"_id":-1}).limit(10).skip(10).explain("allPlansExecution")

{"queryPlanner" : {"plannerVersion" : 1,"namespace" : "tabase.userx","indexFilterSet" : false,"parsedQuery" : {"$or" : [{"id" : {"$eq" : 1}},{"name" : {"$eq" : "xxxxx"}}]},"winningPlan" : {"stage" : "SUBPLAN","inputStage" : {"stage" : "LIMIT","limitAmount" : 10,"inputStage" : {"stage" : "PROJECTION","transformBy" : {"name" : 1},"inputStage" : {"stage" : "SKIP","skipAmount" : 0,"inputStage" : {"stage" : "FETCH","filter" : {"$or" : [{"id" : {"$eq" : 1}},{"name" : {"$eq" : "xxxxx"}}]},"inputStage" : {"stage" : "IXSCAN","keyPattern" : {"_id" : 1},"indexName" : "_id_","isMultiKey" : false,"multiKeyPaths" : {"_id" : [ ]},"isUnique" : true,"isSparse" : false,"isPartial" : false,"indexVersion" : 2,"direction" : "backward","indexBounds" : {"_id" : ["[MaxKey, MinKey]"]}}}}}}},"rejectedPlans" : [ ]},"executionStats" : {"executionSuccess" : true,"nReturned" : 10,"executionTimeMillis" : 35,"totalKeysExamined" : 20,"totalDocsExamined" : 20,"executionStages" : {"stage" : "SUBPLAN","nReturned" : 10,"executionTimeMillisEstimate" : 0,"works" : 21,"advanced" : 10,"needTime" : 10,"needYield" : 0,"saveState" : 0,"restoreState" : 0,"isEOF" : 1,"invalidates" : 0,"inputStage" : {"stage" : "LIMIT","nReturned" : 10,"executionTimeMillisEstimate" : 0,"works" : 20,"advanced" : 10,"needTime" : 10,"needYield" : 0,"saveState" : 0,"restoreState" : 0,"isEOF" : 1,"invalidates" : 0,"limitAmount" : 10,"inputStage" : {"stage" : "PROJECTION","nReturned" : 10,"executionTimeMillisEstimate" : 0,"works" : 20,"advanced" : 10,"needTime" : 10,"needYield" : 0,"saveState" : 0,"restoreState" : 0,"isEOF" : 0,"invalidates" : 0,"transformBy" : {"name" : 1},"inputStage" : {"stage" : "SKIP","nReturned" : 10,"executionTimeMillisEstimate" : 0,"works" : 20,"advanced" : 10,"needTime" : 10,"needYield" : 0,"saveState" : 0,"restoreState" : 0,"isEOF" : 0,"invalidates" : 0,"skipAmount" : 0,"inputStage" : {"stage" : "FETCH","filter" : {"$or" : [{"id" : {"$eq" : 1}},{"name" : {"$eq" : "xxxxx"}}]},"nReturned" : 20,"executionTimeMillisEstimate" : 0,"works" : 20,"advanced" : 20,"needTime" : 0,"needYield" : 0,"saveState" : 0,"restoreState" : 0,"isEOF" : 0,"invalidates" : 0,"docsExamined" : 20,"alreadyHasObj" : 0,"inputStage" : {"stage" : "IXSCAN","nReturned" : 20,"executionTimeMillisEstimate" : 0,"works" : 20,"advanced" : 20,"needTime" : 0,"needYield" : 0,"saveState" : 0,"restoreState" : 0,"isEOF" : 0,"invalidates" : 0,"keyPattern" : {"_id" : 1},"indexName" : "_id_","isMultiKey" : false,"multiKeyPaths" : {"_id" : [ ]},"isUnique" : true,"isSparse" : false,"isPartial" : false,"indexVersion" : 2,"direction" : "backward","indexBounds" : {"_id" : ["[MaxKey, MinKey]"]},"keysExamined" : 20,"seeks" : 1,"dupsTested" : 0,"dupsDropped" : 0,"seenInvalidated" : 0,"indexDef" : {"indexName" : "_id_","isMultiKey" : false,"multiKeyPaths" : {"_id" : [ ]},"keyPattern" : {"_id" : 1},"isUnique" : true,"isSparse" : false,"isPartial" : false,"direction" : "backward"}}}}}}},"allPlansExecution" : [ ]},"serverInfo" : {"host" : "localhost.localdomain","port" : 27017,"version" : "4.0.6-3","gitVersion" : "a64d7bd556ea66a10d1574885deefea32f71f842"},"ok" : 1
}

Hint

虽然MongoDB查询优化器一般工作的很不错,但是也可以使用hint()来强迫MongoDB使用一个特定的索引。在这种方法下某些情形下会提升性能。一个有索引的collection并且执行一个多字段的查询。传入一个制定的索引,强迫查询使用该索引。

db.userx.find({"name":"user1000", "age":30}).hint({"name":1})

注意:请确定你已经创建了相应的索引。

假设在users上有个{"a": 1, "b": 1}的索引,名称是"a_1_b_1",则如下两种方式等价:

db.userx.find({"a": 4, "b": 5, "c": 6}).hint({"a": 1, "b": 1})
db.userx.find({"a": 4, "b": 5, "c": 6}).hint("a_1_b_1")

也可以强迫查询不适用索引,做表扫描:

db.users.find().hint({"$natural":1})

性能分析工具

mongotop
mongostat

当前正在执行的语句

db.currentOp().inprog

kill某操作

db.killOp(<operation id>)

capped collection

capped collections是性能出色的有着固定大小的集合(定容集合),以LRU(Least Recently Used最近最少使用)规则和插入顺序进行 age-out(老化移出)处理,自动维护集合中对象的插入顺序,在创 建时要预先指定大小。如果空间用完,新添加的对象将会取代集合中最旧的对象。
可以插入及更新,但更新不能超出 collection 的大小,否则更新失败。不允许删除,但是可 以调用 drop() 删除集合中的所有行,但是 drop 后需要显式地重建集合。在 32 位机上,一 个capped collection的最大值约为482.5M,64 位上只受系统文件大小的限制。

使用mongobooster访问。

索引

默认情况下,当添加文档到集合中时,默认情况下,mongodb会为_id字段创建索引,这有点像mysql的存储方式。在具有大量文档的集合中,如果没有恰当的索引,其性能是非常低下的,所以通常需要和在数据库中一样创建索引。

db.userx.ensureIndex({"name":1}) -- 在name字段上创建一个索引

除了单个字段上的索引,也支持复合索引

db.userx.ensureIndex({"name":1,"age":1}) -- 在name和age字段上创建一个复合索引

索引除了用于搜索外,还可以支持排序操作。

除了普通索引外,还支持唯一索引,只要增加unique:true属性即可

db.userx.ensureIndex({"name":1},{"unique":true})

删除索引

db.userx.dropIndex({"name":1})

重构索引

db.userx.reIndex({"name":1})

从mongodb 2.6开始,mongodb还支持一个查询中使用多个索引,也就是索引连接操作。

MongoDB的一些限制:参考《MongoDB实战 架构、开发、管理》第11章。

参考资料:

MongoDB实战 架构、开发、管理

MongoDB权威指南

MongoDB实战

https://docs.spring.io/spring-data/mongodb/docs/2.0.14.RELEASE/reference/html/

转载于:https://www.cnblogs.com/zhjh256/p/6698860.html

mongodb安装、远程访问设置、管理命令、增删改查操作以及GUI相关推荐

  1. MySQL数据库5.7版本安装部署及常规命令 增删改查 索引 事务 优化

    概述:数据库(Database)是按照数据结构组织.存储和管理数据的仓库,它产生于距今六十多年前,数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统,在各个方面得 ...

  2. mysql用户权限管理和增删改查操作

    mysql使用上一篇的安装的mysql.启动mysql服务后直接就能连到mysql服务器上. # mysql Welcome to the MySQL monitor.    Commands end ...

  3. Java管理Cookie增删改查操作

    Cookie属性 了解这几个属性之后,就知道如何进行Cookie的操作了. name Cookie的名称. value Cookie的值. maxAge Cookie的失效时间,有以下几种值,默认为- ...

  4. java修改cookie的值_Java管理Cookie增删改查操作。

    Cookie属性 了解这几个属性之后,就知道如何进行Cookie的操作了. name Cookie的名称. value Cookie的值. maxAge Cookie的失效时间,有以下几种值,默认为- ...

  5. MongoDB的增删改查操作

    前面介绍了MongoDB的基本概念与常见的操作,本文来重点分析下MongoDB的增删改查操作 文章目录 什么是"mongo" 新增操作 删除操作 更新操作 查询操作 Where语句 ...

  6. MySQL学习总结(2) --- 数据表管理(增删改查)、使用DQL查询数据(SELECT)

    MySQL学习总结(2) - 数据表管理(增删改查).使用DQL查询数据(SELECT) 1. 数据管理(增删改查) 数据库数据管理方法: a.通过SQLyog等管理工具管理数据库数据 b. 通过DM ...

  7. 论坛模块_版块管理_增删改查实现上下移动

    论坛模块_版块管理1_增删改查 设计实体Forum.java public class Forum {private Long id;private String name;private Strin ...

  8. 国产化之路-统信UOS /Nginx /Asp.Net Core+ EF Core 3.1/达梦DM8实现简单增删改查操作

    引言 经过前期的准备工作,.net core 3.1的运行环境和WEB服务器已经搭建完毕,这里需要注意一下,达梦DM8数据库对于Entity Framework Core 3.1 的驱动在NuGet官 ...

  9. javaweb简单的登录增删改查系统_国产化之路统信UOS /Nginx /Asp.Net Core+ EF Core 3.1/达梦DM8实现简单增删改查操作...

    引言 经过前期的准备工作,.net core 3.1的运行环境和WEB服务器已经搭建完毕,这里需要注意一下,达梦DM8数据库对于Entity Framework Core 3.1 的驱动在NuGet官 ...

最新文章

  1. AAAI 2021 最「严」一届发榜,1692 篇论文中选,录取率仅为 21%
  2. jquery二维码生成插件jquery.qrcode.js
  3. 使用 PHP 构建的 Web 应用如何避免 XSS 攻击
  4. 露天下的云端信标组比赛
  5. Visial Studio 2019提示:namespace std 没有成员 max 的解决方法
  6. 交换机组网典型故障案例及处理思路
  7. spring cloud nacos_SpringCloud Alibaba系列之Nacos配置中心玩法
  8. 40张令人震惊的对比图,第一张细思恐极
  9. P3302-[SDOI2013]森林【主席树,LCA,启发式合并】
  10. 2016校招真题编程练习——微信红包(腾讯)
  11. jquery 打开服务器文件管理,javascript - 前端js如何封装一个方法或者是jQuery的插件实现点击一个按钮打开本地文件管理系统,进行上传文件...
  12. 新荣耀员工现金补偿最高可拿 N+5;天津立法禁止采集人脸识别信息;IntelliJ IDEA 新版发布|极客头条...
  13. OpenCV---模板匹配
  14. 西南交大数据结构c语言版集合的并,交实验报告答案,数据结构(C语言版)实验报告 集合的交并差...
  15. ORK进行物体检测过程中出现的报错及解决方案
  16. 想要学习云计算,不知道如何开始?我来说下云计算的学习流程,分享一些学习资源。
  17. Proteus仿真:使用8255输出连续方波
  18. K-Means聚类算法
  19. 程序员该如何规划自己的职业发展?
  20. PS制作马赛克效果、炫酷光线

热门文章

  1. 使用zabbix监控MongoDB
  2. hdu 1250 大数相加并用数组储存
  3. UbuntuHelp:AptGet/Howto/zh
  4. Visual C#中用WMI控制远程计算机
  5. Python MySQL(MySQLdb)
  6. 蓝桥杯 ADV-79 算法提高 时间转换
  7. python的dropna 和notna的性能_python轻松滤除缺失数据
  8. Mysql 的utf8和utf8mb4
  9. MySQL如何用一条SQL将一张表里的数据插入到另一张表
  10. 字符串数组最长公共前缀