加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 电商 > 正文

浅谈MongoDB中的常用操作,你都知道多少?

发布时间:2022-03-05 13:39:20 所属栏目:电商 来源:互联网
导读:这篇文章给大家分享的是有关MongoDB中的常用操作的内容,小编觉得挺实用的,因此分享给大家做个参考。下文整理了很多MongoDB操作技巧,感兴趣的朋友接下来一起跟随小编看看吧。 1、shell登陆和显示 假设在本机上有一个端口为17380的MongoDB服务,假设已经把m
       这篇文章给大家分享的是有关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")
    批量停止:
 
    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))})
    把处于等待中的分片显示出来:
 
     常用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("##########");
    杀掉某些特定任务:
 
    (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)
 }
})
    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]

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读