• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >MongoDB > MongoDB使用小结 一些常用操作分享

MongoDB使用小结 一些常用操作分享

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了mongodb使用教程,mongodb使用,mongodb使用场景,mongodb使用手册,mongodb 使用用户登录等相关知识,希望本文的分享对您有所帮助

MongoDB的使用之前也分享过一篇,稍微高阶点:见这里:《MongoDB使用小结》

1、shell登陆和显示

假设在本机上有一个端口为17380的MongoDB服务,假设已经把mongo bin文件加入到系统PATH下。

登陆:mongo --port 17380

显示DB:show dbs

进入某DB:use test_cswuyg

显示集合:show tables

2、简单查找
查找文档:db.test_mac_id.find({'a': 'b'})

删除文档:db.test_mac_id.remove({'a': 'b'})

查找找到某一天的数据:

db.a.find({'D' : ISODate('2014-04-21T00:00:00Z')}) 或者 db.a.find({'D' : ISODate('2014-04-21')})

删除某一天的数据:

db.region_mac_id_result.remove({"D" : ISODate('2014-04-17')})

小于2014.6.5的数据:

db.xxx.find({E: {$lt :ISODate('2014-06-05')}})

大于等于2014.6.1的数据:

db.xxx.find({E: {$gte: ISODate("2014-05-29")}}).count()

两个条件:

db.xxx.find({E:{$gte: ISODate("2014-05-29"), $lte: ISODate("2014-06-04")}}).count()

json中的嵌套对象查询,采用“点”的方式:

mongos> db.wyg.find({"a.b": {$exists: true}})

{ "_id" : "c", "a" : { "b" : 10 } }

某个字段存在,且小于1000有多少:

db.stat.find({_: ISODate("2014-06-17"), "123": {$exists: 1, $lte: 1000}}, {"123": 1}).count()

3、存在和遍历统计
存在'i': 1,且存在old_id字段:

mongos> var it = db.test.find({'i': 1, "old_id": {$exists: 1}})

遍历计数1:mongos> var count = 0;while(it.hasNext()){if (it.next()["X"].length==32)++count}print(count)

遍历计数2:mongos> var count = 0;while(it.hasNext()){var item = it.next(); if (item['X'].length==32 && item['_id'] != item['X'])++count;if(!item['X'])++count;}print(count)

4、插入和更新
> db.test.findOne({_id: 'cswuyg'})

null

> db.test.insert({'_id': 'cswuyg', 'super_admin': true})

> db.test.findOne({'_id': 'cswuyg'})

{

"_id" : "cswuyg",

"super_admin" : true

}

db.test.update({'_id': 'cswuyg'}, {$set: {'super_admin': true}})

5、repair 操作
对某个DB执行repair:进入要repair的db,执行db.repairDatabase()

对mongodb整个实例执行repair:numactl --interleave=all /mongod --repair --dbpath=/home/disk1/mongodata/shard/

6、mongodb任务操作
停止某个操作:

[xxx]$ mongo --port 17380
MongoDB shell version: 2.4.5
connecting to: 127.0.0.1:17380/test
mongos> db.currentOp()
{ "inprog" : [ ...] }

mongos> db.killOp("shard0001:163415563")
</div>

批量停止:

db.currentOp().inprog.forEach(function(item){db.killOp(item.opid)})
当查询超过1000秒的,停止:

db.currentOp().inprog.forEach(function(item){if(item.secs_running > 1000 )db.killOp(item.opid)})
停止某个数据源的查询:

db.currentOp().inprog.forEach(function(item){if(item.ns == "cswuyg.cswuyg")db.killOp(item.opid)})
把所有在等待锁的操作显示出来:

db.currentOp().inprog.forEach(function(item){if(item.waitingForLock)print(JSON.stringify(item))})
把处于等待中的分片显示出来:

db.currentOp().inprog.forEach(function(item){if(item.waitingForLock){print(item.opid.substr(0,9));print(item.op);}})
把非等待的分片显示出来:

db.currentOp().inprog.forEach(function(item){if(!item.waitingForLock){var lock_info = item["opid"];print(lock_info.substr(0,9));print(item["op"]);}})
查找所有的查询任务:

db.currentOp().inprog.forEach(function(item){if(item.op=="query"){print(item.opid);}})
查找所有的非查询任务:

db.currentOp().inprog.forEach(function(item){if(item.op!="query"){print(item.opid);}})
查找所有的操作:

db.currentOp().inprog.forEach(function(item){print(item.op, item.opid);});
常用js脚本,可直接复制到mongo-shell下使用:

显示当前所有的任务状态:

print("##########");db.currentOp().inprog.forEach(function(item){if(item.waitingForLock){var lock_info = item["opid"];print("waiting:",lock_info,item.op,item.ns);}});print("----");db.currentOp().inprog.forEach(function(item){if(!item.waitingForLock){var lock_info = item["opid"];print("doing",lock_info,item.op,item.ns);}});print("##########");
</div>

杀掉某些特定任务:

(1)

db.currentOp().inprog.forEach(function(item){if(item.waitingForLock){var lock_info = item["opid"];if(item.op=="query" && item.secs_running >60 && item.ns=="cswuyg.cswuyg"){db.killOp(item.opid)}}})
(2)

db.currentOp().inprog.forEach(function(item) {
 var lock_info = item["opid"];
 if (item.op == "query" && item.secs_running > 1000) {
 print("kill", item.opid);
 db.killOp(item.opid)
 }
})
</div>

7、删除并返回数据
old_item = db.swuyg.findAndModify({query: {"_id": "aabbccdd"}, fields:{"D": 1,'E':1, 'F':1}, remove: true})

fields里面为1的是要返回的数据。

8、分布式集群部署情况
(1) 细致到collection的显示:sh.status()

(2)仅显示分片:

use config; db.shards.find()

{ "_id" : "shard0000", "host" : "xxhost:10001" }

{ "_id" : "shard0001", "host" : "yyhost:10002" }

....

(3)

use admin

db.runCommand({listshards: 1})

列出所有的shard server

9、正则表达式查找
正则表达式查询:
mongos> db.a.find({"tt": /t*/i})
{ "_id" : ObjectId("54b21e0f570cb10de814f86b"), "aa" : "1", "tt" : "tt" }
其中i表明是否是case-insensitive,有i则表示忽略大小写

db.testing.find({"name":/[7-9]/})

当name的值为789这几个数字组成的字符串时,查询命中。

10、查询性能
db.testing.find({name: 123}).explain()

输出结果:

{
  "cursor" : "BasicCursor",
  "isMultiKey" : false,
  "n" : 1,
  "nscannedObjects" : 10,
  "nscanned" : 10,
  "nscannedObjectsAllPlans" : 10,
  "nscannedAllPlans" : 10,
  "scanAndOrder" : false,
  "indexOnly" : false,
  "nYields" : 0,
  "nChunkSkips" : 0,
  "millis" : 0,
  "indexBounds" : {
  },
  "server" : "xxx:10001"
}
</div>

11、更新或插入
当该key不存在的时候执行插入操作,当存在的时候则不管,可以使用setOnInsert

db.wyg.update({'_id': 'id'}, {'$setOnInsert': {'a': 'a'}, '$set': {'b': 'b'}}, true)

当id存在的时候,忽略setOnInsert。

当id存在的时候,如果要插入,则插入{'a': 'a'}

最后的参数true,则是指明,当update不存在的_id时,执行插入操作。默认是false,只更新,不插入。

push、setOnInsert:db.cswuyg.update({"_id": "abc"}, {$push: {"name": "c"}, $setOnInsert: {"cc":"xx"}}, true)

12、计算DB中collection的数量
db.system.namespaces.count()

13、增加数字,采用$inc
db.cswuyg.update({"a.b": {$exists: true}}, {$inc: {'a.b': 2}})

也就是对象a.b的值,增加了2

注意$inc只能用于数值。

14、删除某个key
db.cswuyg.update({'_id': 'c'}, {$unset: {'b': {$exists: true}}})

{ "_id" : "c", "a" : { "b" : 12 }, "b" : 7 }

转变为:

{ "_id" : "c", "a" : { "b" : 12 } }

15、增加key:value
db.cswuyg.update({'_id': 'z'}, {'$set': {'hello': 'z'}})

{ "_id" : "z", "b" : 1 }

转变为:

{ "_id" : "z", "b" : 1, "hello" : "z" }

16、删除数据库、删除表
删除数据库:db.dropDatabase();

删除表:db.mytable.drop();

17、查找到数据只看某列
只显示key名为D的数据:db.test.find({}, {D: 1})

18、查看分片存储情况

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • MongoDB使用小结 一些常用操作分享
  • MongoDB使用小结:一些不常见的经验分享
  • mongodb使用心得简单总结
  • MongoDB系列教程(二):MongoDB简介
  • MongoDB使用指南--基本操作

相关文章

  • 2017-05-11cgroup限制mongodb进程内存大小
  • 2017-05-11MongoDB快速入门笔记(二)之MongoDB的概念及简单操作
  • 2017-05-11MongoDB中的MapReduce简介
  • 2017-05-11MongoDB快速入门笔记(一)之windows下安装MongoDB方法
  • 2017-05-11PHP MongoDB GridFS 存储文件的方法详解
  • 2017-05-11记一次MongoDB性能问题(从MySQL迁移到MongoDB)
  • 2017-05-11详解MongoDB中用sharding将副本集分配至服务器集群的方法
  • 2017-05-11MongoDB学习之Text Search文本搜索功能
  • 2017-05-11MongoDB数据库插入、更新和删除操作详解
  • 2017-05-11详解mongodb 主从配置

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • MongoDB系列教程(八):GridFS存储详解
    • MongoDB快速入门笔记(七)MongoDB的用户管理操作
    • PHP中安装使用mongodb数据库
    • Mongo DB增删改查命令
    • 将MongoDB加入到Windows的本地服务项的方法
    • mongodb在建立一个T级别的数据库时,进程挂掉的解决方法
    • Mongodb 启动命令mongod参数说明(中文翻译)
    • MongoDB学习笔记—Linux下搭建MongoDB环境
    • MongoDB系列教程(一):NoSQL起源
    • 记一次MongoDB性能问题(从MySQL迁移到MongoDB)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有