设为首页 收藏本站
查看: 1022|回复: 0

[经验分享] MongoDB基本操作语句

[复制链接]

尚未签到

发表于 2018-10-26 10:50:46 | 显示全部楼层 |阅读模式
--------------------------------------------------------------------  
MongoDB命令管理
  
--------------------------------------------------------------------
  

  
shell操作数据库
  

  

  
一、超级用户相关:
  

  
1. #进入数据库admin
  

  
   use admin
  

  
2. #增加或修改用户密码
  

  
   db.addUser('name','pwd')
  

  
3. #查看用户列表
  

  
   db.system.users.find()
  

  
4. #用户认证
  

  
   db.auth('name','pwd')
  

  
5. #删除用户
  

  
   db.removeUser('name')
  

  
6. #查看所有用户
  

  
   show users
  

  
7. #查看所有数据库
  

  
   show dbs
  

  
8. #查看所有的collection
  

  
   show collections
  

  
9. #查看各collection的状态
  

  
   db.printCollectionStats()
  

  
10. #查看主从复制状态
  

  
    db.printReplicationInfo()
  

  
11. #修复数据库
  

  
    db.repairDatabase()
  

  
12. #设置记录profiling,0=off 1=slow 2=all
  

  
    db.setProfilingLevel(1)
  

  
13. #查看profiling
  

  
    show profile
  

  
14. #拷贝数据库
  

  
    db.copyDatabase('mail_addr','mail_addr_tmp')
  

  
15. #删除collection
  

  
    db.mail_addr.drop()
  

  
16. #删除当前的数据库
  

  
    db.dropDatabase()
  

  

  

  
二、增删改
  

  
1. #存储嵌套的对象
  

  
   db.foo.save({'name':'ysz','address':{'city':'beijing','post':100096},'phone':[138,139]})
  

  
2. #存储数组对象
  

  
   db.user_addr.save({'Uid':'yushunzhi@sohu.com','Al':['test-1@sohu.com','test-2@sohu.com']})
  

  
3. #根据query条件修改,如果不存在则插入,允许修改多条记录
  

  
   db.foo.update({'yy':5},{'$set':{'xx':2}},upsert=true,multi=true)
  

  
4. #删除yy=5的记录
  

  
   db.foo.remove({'yy':5})
  

  
5. #删除所有的记录
  

  
   db.foo.remove()
  

  

  

  
三、索引
  

  
1. #增加索引:1(ascending),-1(descending)
  

  
   db.foo.ensureIndex({firstname: 1, lastname: 1}, {unique: true});
  

  
2. #索引子对象
  

  
   db.user_addr.ensureIndex({'Al.Em': 1})
  

  
3. #查看索引信息
  

  
   db.foo.getIndexes()
  

  
   db.foo.getIndexKeys()
  

  
4. #根据索引名删除索引
  

  
   db.user_addr.dropIndex('Al.Em_1')
  

  

  

  
四、查询
  

  
1. #查找所有
  

  
   db.foo.find()
  

  
2. #查找一条记录
  

  
   db.foo.findOne()
  

  
3. #根据条件检索10条记录
  

  
   db.foo.find({'msg':'Hello 1'}).limit(10)
  

  
4. #sort排序
  

  
   db.deliver_status.find({'From':'ixigua@sina.com'}).sort({'Dt',-1})
  
   db.deliver_status.find().sort({'Ct':-1}).limit(1)
  

  
5. #count操作
  

  
   db.user_addr.count()
  

  
6. #distinct操作,查询指定列,去重复
  

  
   db.foo.distinct('msg')
  

  
7. #”>=”操作
  

  
   db.foo.find({"timestamp": {"$gte" : 2}})
  

  
8. #子对象的查找
  

  
   db.foo.find({'address.city':'beijing'})
  

  

  

  
五、管理
  

  
1. #查看collection数据的大小
  

  
   db.deliver_status.dataSize()
  

  
2. #查看colleciont状态
  

  
   db.deliver_status.stats()
  

  
3. #查询所有索引的大小
  

  
   db.deliver_status.totalIndexSize()
  

  

  

  
六、advanced queries:高级查询
  

  
条件操作符
  
$gt : >
  
$lt : <
  
$gte: >=
  
$lte: = 18 的数据
  
db.users.find({name: {$ne: "bruce"}, age: {$gte: 18}});
  

  
查询 creation_date > '2010-01-01' and creation_date  18 的记录,以下查询都一样
  
db.users.find({age: {$gt: 18}});
  
db.users.find({$where: "this.age > 18"});
  
db.users.find("this.age > 18");
  
f = function() {return this.age > 18} db.users.find(f);
  

  
排序sort()
  
以年龄升序asc
  
db.users.find().sort({age: 1});
  
以年龄降序desc
  
db.users.find().sort({age: -1});
  

  
限制返回记录数量limit()
  
返回5条记录
  
db.users.find().limit(5);
  
返回3条记录并打印信息
  
db.users.find().limit(3).forEach(function(user) {print('my age is ' + user.age)});
  
结果
  
my age is 18
  
my age is 19
  
my age is 20
  

  
限制返回记录的开始点skip()
  
从第3条记录开始,返回5条记录(limit 3, 5)
  
db.users.find().skip(3).limit(5);
  

  
查询记录条数count()
  
db.users.find().count();
  
db.users.find({age:18}).count();
  
以下返回的不是5,而是user表中所有的记录数量
  
db.users.find().skip(10).limit(5).count();
  
如果要返回限制之后的记录数量,要使用count(true)或者count(非0)
  
db.users.find().skip(10).limit(5).count(true);
  

  
分组group()
  
假设test表只有以下一条数据
  
{ domain: "www.mongodb.org"
  
, invoked_at: {d:"2009-11-03", t:"17:14:05"}
  
, response_time: 0.05
  
, http_action: "GET /display/DOCS/Aggregation"
  
}
  
使用group统计test表11月份的数据count:count(*)、total_time:sum(response_time)、avg_time:total_time/count;
  
db.test.group(
  
{ cond: {"invoked_at.d": {$gt: "2009-11", $lt: "2009-12"}}
  
, key: {http_action: true}
  
, initial: {count: 0, total_time:0}
  
, reduce: function(doc, out){ out.count++; out.total_time+=doc.response_time }
  
, finalize: function(out){ out.avg_time = out.total_time / out.count }
  
} );
  

  
[
  
{
  
"http_action" : "GET /display/DOCS/Aggregation",
  
"count" : 1,
  
"total_time" : 0.05,
  
"avg_time" : 0.05
  
}
  
]
  

  

  

  
Java 应用示例
  

  
要使用Java操作MongoDB的话,要到官方网站下载一个驱动包,把包导入后,可以尝试来操作了(记得一定要开着服务器)
  

  
首先介绍一下比较常用的几个类
  

  
Mongo:连接服务器,执行一些数据库操作的选项,如新建立一个数据库等
  

  
DB:对应一个数据库,可以用来建立集合等操作
  

  
DBCollection:对应一个集合(类似表),可能是我们用得最多的,可以添加删除记录等
  

  
DBObjec:接口和BasicDBObject对象:表示一个具体的记录,BasicDBObject实现了DBObject,因为是key-value的数据结构,所以用起来其实和HashMap是基本一致的
  

  
DBCursor:用来遍历取得的数据,实现了Iterable和Iterator
  

  
接下来实际的操作一下,代码如下:
  

  
import java.net.UnknownHostException;
  

  
import java.util.List;
  

  
import java.util.Set;
  

  
import com.mongodb.BasicDBObject;
  

  
import com.mongodb.DB;
  

  
import com.mongodb.DBCollection;
  

  
import com.mongodb.DBCursor;
  

  
import com.mongodb.DBObject;
  

  
import com.mongodb.Mongo;
  

  
import com.mongodb.MongoException;
  

  
public class MongoDbTest {
  

  
  public static void main(String[] args) throws UnknownHostException, MongoException {
  

  
    //Mongo m = new Mongo();
  

  
//Mongo m = new Mongo("localhost");
  

  
//获得数据库服务
  

  
Mongo m = new Mongo("localhost", 27017);
  

  
//得到数据库mytest
  

  
DB db = m.getDB("mytest");
  

  
//得到mytest数据库下所有表名
  

  
    Set colls = db.getCollectionNames();
  

  
    for (String s : colls) {
  

  
System.out.println(s);
  

  
}
  

  
//得到testCollection表
  

  
DBCollection coll = db.getCollection("testCollection");
  

  
//new 一个BasicDBObject对象doc
  

  
BasicDBObject doc = new BasicDBObject();
  

  
//赋值
  

  
    doc.put("name", "MongoDB");
  

  
    doc.put("type", "database");
  

  
doc.put("count", 1);
  

  
//又new 一个BasicDBObject对象info
  

  
    BasicDBObject info = new BasicDBObject();
  

  
    info.put("x", 203);
  

  
info.put("y", 102);
  

  
//把info放入doc
  

  
doc.put("info", info);
  

  
//向testCollection表中插入一条数据
  

  
coll.insert(doc);
  

  
//查询一条数据
  

  
    DBObject myDoc = coll.findOne();
  

  
    System.out.println(myDoc);
  

  

  

  
    //循环插入100条数据到testCollection
  

  
    for (int i=0; i < 100; i++) {
  

  
      coll.insert(new BasicDBObject().append("i", i));
  

  
    }
  

  

  
    //Counting Documents in A Collection
  

  
    System.out.println(coll.getCount());
  

  

  
    //Using a Cursor to Get All the Documents
  

  
    DBCursor cur = coll.find();
  

  
    while(cur.hasNext()) {
  

  
-----------------------------------------------------
  
DB methods:
  
        db.addUser(username, password[, readOnly=false])
  
        db.auth(username, password)
  
        db.cloneDatabase(fromhost)
  
        db.commandHelp(name) returns the help for the command
  
        db.copyDatabase(fromdb, todb, fromhost)
  
        db.createCollection(name, { size : ..., capped : ..., max : ... } )
  
        db.currentOp() displays the current operation in the db
  
        db.dropDatabase()
  
        db.eval(func, args) run code server-side
  
        db.getCollection(cname) same as db['cname'] or db.cname
  
        db.getCollectionNames()
  
        db.getLastError() - just returns the err msg string
  
        db.getLastErrorObj() - return full status object
  
        db.getMongo() get the server connection object
  
        db.getMongo().setSlaveOk() allow this connection to read from the nonmaster member of a replica pair
  
        db.getName()
  
        db.getPrevError()
  
        db.getProfilingLevel() - deprecated
  
        db.getProfilingStatus() - returns if profiling is on and slow threshold
  

  
        db.getReplicationInfo()
  
        db.getSiblingDB(name) get the db at the same server as this one
  
        db.isMaster() check replica primary status
  
        db.killOp(opid) kills the current operation in the db
  
        db.listCommands() lists all the db commands
  
        db.logout()
  
        db.printCollectionStats()
  
        db.printReplicationInfo()
  
        db.printSlaveReplicationInfo()
  
        db.printShardingStatus()
  
        db.removeUser(username)
  
        db.repairDatabase()
  
        db.resetError()
  
        db.runCommand(cmdObj) run a database command.  if cmdObj is a string, turns it into { cmdObj : 1 }
  
        db.serverStatus()
  
        db.setProfilingLevel(level,) 0=off 1=slow 2=all
  
        db.shutdownServer()
  
        db.stats()
  
        db.version() current version of the server
  
        db.getMongo().setSlaveOk() allow queries on a replication slave server
  
        db.fsyncLock() flush data to disk and lock server for backups
  
        db.fsyncUnock() unlocks server following a db.fsyncLock()
  
>



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-626685-1-1.html 上篇帖子: Mongodb 数据导入导出,备份及恢复 下篇帖子: 解决MongoDB磁盘IO问题的三种方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表