MongoDB之基本命令

1.  数据库

    1.  查看命令帮助  db.help()

    2.  切换/创建数据库  use yangjianbo;  库存在就切换;不存在就创建

       还有一种切换数据库方式,在客户端登录mongo时,指定库  mongo --host 192.168.2.231:16535 zhenpin

    3.  查询所有数据库  show dbs;

    4.  删除当前数据库  db.dropDatabase();

    5.  从指定主机上克隆数据库到当前数据库  db.cloneDatabase("192.168.1.100");

    6.  从指定主机上复制指定数据库数据到某个数据库  db.copyDatabase("mydb","temp","192.168.1.100");

    7.  修复当前数据库  db.repairDatabase();  整理碎片并回收磁盘空间,修复期间会产生锁,生产环境要慎用

    8.  查看当前使用的数据库  db.getName();或者db;

    9.  显示当前db状态  db.stats();

{
        "db" : "zhenpin",    
        "collections" : 3,
        "views" : 0,
        "objects" : 148258,  表示当前数据库所有collection总共有多少行数据。显示的数据是一个估计值
        "avgObjSize" : 126.7042385571099,   表示每行数据是大小,也是估计值,单位是bytes
        "dataSize" : 18784917,  当前数据库所有数据的总大小,不是指占有磁盘大小。单位是bytes
        "storageSize" : 7876608, 表示当前数据库占有磁盘大小,单位是bytes,因为mongodb有预分配空间机制,为了防止当有大量数据插入时对磁盘的压力,因此会事先多分配磁盘空间。
        "numExtents" : 0,
        "indexes" : 7,
        "indexSize" : 5984256,  表示索引占有磁盘大小
        "fsUsedSize" : 8974680064,  表示当前数据库预分配的文件大小
        "fsTotalSize" : 53660876800,
        "ok" : 1,
        "operationTime" : Timestamp(1660285596, 1),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1660285596, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}               

    10.  查看数据库版本  db.version();

    11.  查看当前数据库的连接地址  db.getMongo();

    12.  查看之前的错误信息  db.getPrevError();

    13.  清除错误信息  db.resetError();              

2.  集合

    1.  创建一个集合

        db.createCollection("student");

    2.  创建一个固定集合

        db.createCollection("student",{size:20,capped:true,max:100});

        capped  是否启用集合限制

        size  限制集合使用空间的大小,单位为kb

        max  集合中最大条数限制

        autoIndexId  是否使用_id作为索引 

        db.runCommand({"convertToCapped":"stuent",size:10000})  将普通集合转换为固定集合

        db.collection.isCapped()  检查一个集合是否固定集合                   

    2.  显示当前数据库中的集合

        show collections;

        db.getCollectionNames();

    3.  使用集合

        db.集合名

        db.student

        db.getCollection("student");

    4.  查看集合命令帮助文档

        db.student.help();

    5.  查看当前集合的数据条数

        db.student.count();

    6.  查看当前集合数据大小

        db.student.dataSize();  单位是字节

    7.  查看集合索引大小

        db.student.totalIndexSize();

    8.  为集合分配的空间大小,包括未使用的空间

        db.student.storageSize();

    9.  显示集合总大小,包括索引和数据的大小和分配空间的大小

        db.student.totalSize();

    10.  显示当前集合所在的db

        db.student.getDB();

    11.  显示当前集合的状态

        db.student.stats();  

    12.  集合的分片版本信息

        db.student.getShardVersion();

    13.  集合重命名

        db.student.renameCollection("student1");                    

        db.getCollection("student").renameCollection("student1"); 

    14.  显示当前db所有集合的状态信息

        db.printCollectionStats();

    15.  删除当前集合

        db.student.drop();                                     

3.  文档(CURD)

    1.  写入文档

        1.  db.collection.insert()  可以插入单个文档,也可以插入多个文档

            1.  插入一条记录

                db.student.insert({"name":"lihaijie","age":35});

            2.  插入多条记录

                db.student.insert([{"name":"lihaijie","age":35},{"name":"houxiuyan","age":36}]);

                批量插入的时候,需要使用数组,使用[ ]                            

        2.  db.collection.insertOne()

            这是mongodb3.2以后的功能

            db.student.insertOne({"name":"maojiangzhong","age":37});

        3.  db.collection.insertMany()

            这是mongodb3.2以后的功能

            db.student.insertMany([{"name":"maojiangzhong","age":37},{"name":"hongbing","age":27}]);        

    2.  查看文档

        1.  db.collection.find();  查看所有的文档

            db.discoveryinfo.find({"_id":4},{"title":1})  查询id为4的文档,只列出title字段

            db.discoveryinfo.find({"_id":{$in:[826,827]}},{"title":1,"resoures":1})  查询id为826,827的文档,只列出title和resources字段

        2.  db.collection.findAndModify()

            1.  语法               

db.collection.findAndModify({
    query: <document>,
    sort: <document>,
    remove: <boolean>,
    update: <document>,
    new: <boolean>,
    fields: <document>,
    upsert: <boolean>,
    bypassDocumentValidation: <boolean>,
    writeConcern: <document>,
    collation: <document>
});

            2.  查找并修改文档                          

                db.student.findAndModify({query:{"name":"maojiangzhong"},sort:{"age":1},update:{"age":50},upsert:true});

            3.  查找并删除              

                db.student.findAndModify({query:{"age":50},sort:{"_id":1},remove:true}); 

        3.  db.collection.findOne()

            1.  语法

                db.collection.findOne(query,projection)

                第一个参数是查询条件,第二个参数是列出条件

            2.  查找一个文档,并列出某个字段

                db.student.findOne({"name":"lihaijie","age":38},{"age":1});

        4.  db.collection.findOneAndDelete(filter,options)

            1.  语法

db.collection.findOneAndDelete(
   <filter>,      #过滤条件
   {
     projection: <document>,     #列出字段
     sort: <document>,    #排序规则
     maxTimeMS: <number>,   #
     collation: <document>
   }
)

            2.  查找一个文档并删除,列出文档的某个字段

                db.student.findOneAndDelete({"name" : "lihaijie", "age" : 38},{projection:{"age":1}}) 

        5.  db.collection.findOneAndReplace(filter,replacement,options)

            1.  语法

 

db.collection.findOneAndReplace(
   <filter>,
   <replacement>,
   {
     projection: <document>,
     sort: <document>,
     maxTimeMS: <number>,
     upsert: <boolean>,
     returnNewDocument: <boolean>,
     collation: <document>
   }
)

            2.  查找一个文档并替换为新的文档,返回被替换的文档  

                db.student.findOneAndReplace({"name":"lihaijie"},{"name":"lihaijie","age":39},{sort:{"age":-1}}); 

        6.  db.collection.findOneAndUpdate()

            1.  语法

db.collection.findOneAndUpdate(
   <filter>,
   <update>,    #必须包含修改操作符
   {
     projection: <document>,
     sort: <document>,
     maxTimeMS: <number>,
     upsert: <boolean>,
     returnNewDocument: <boolean>,
     collation: <document>
   }
)

            2.  查找一个文档并更新  

                db.student.findOneAndUpdate({"name":"lihaijie","age":38},{$set:{"age":50}}); 

    3.  删除文档

        1.  db.collection.remove()

            1.  语法           

db.collection.remove(
   <query>,
   <justOne>    #justOne默认为false,如果为true或1,查询到多个文档只删除一个文档
)  

 

            2.  删除全部记录(默认)

                db.student.remove()

            3.  删除单个文档

                db.student.remove({"name":"lihaijie"},{justOne:true}); 

        2.  db.collection.deleteOne()

            1.  语法

 

db.collection.deleteOne(
   <filter>,
   {
      writeConcern: <document>,
      collation: <document>
   }
)  

            2.  删除单个文档

                db.student.deleteOne({"name" : "lihaijie", "age" : 35});

        3.  db.collection.deleteMany()

            1.  语法  

db.collection.deleteMany(
   <filter>,
   {
      writeConcern: <document>,
      collation: <document>
   }
)

            2.  删除查出的所有文档  

                db.student.deleteMany({"name" : "lihaijie"});                                                                                                                                                                                                                                                                       

    4.  更新文档

        1.  db.collection.save()

        2.  db.collection.update()

            1.  语法

db.collection.update(
    查询条件,
    整个文档或者修改器,
    upsert: boolean,
    multi: boolean 或者 multi 文档,
    writeConcern :异常信息等级
)
参数说明:
查询条件是让我们定位到需要修改的文档
第二个参数是整个文档或修改器
upsert默认是false,不写入
multi默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来的多条记录全部更新
writeConcern的级别参数:
writeConcern.NONE:没有异常抛出
writeConcern.NORMAL:仅抛出网络错误异常,没有服务器错误异常
WriteConcem.SAFE:抛出网络错误异常、服务器错误异常;并等待服务器完成写操
作。
WriteConcem.MAJORITY:抛出网络错误异常、服务器错误异常;并等待一个主服
务器完成写操作。
WriteConcem.FSYNC SAFE:抛出网络错误异常、服务器错误异常;写操作等待服
务器将数据刷新到磁盘。
WriteConcem.JOURNAL SAFE:抛 出网络错误异常 、服务器错误异常;写操作等待
服务器提交到磁盘的日志文件。
WriteConcem.REPLICAS SAFE:抛出网络错误异常、服务器错误异常;等待至少 2
台服务器完成写操作。

            2.  更新一条记录

                db.student.update({"name":"lihaijie"},{$set:{"age":20}});

            3.  更新多条记录

                db.student.update({"name":"lihaijie"},{$set:{"age":35}},{multi:true});                            

        3.  db.collection.updateOne()  更新单条文档

            1.  语法

db.collection.updateOne(
   <filter>,
   <update>,
   {
     upsert: <boolean>,
     writeConcern: <document>,
     collation: <document>,
     arrayFilters: [ <filterdocument1>, ... ],
     hint:  <document|string>      
   }
)  

            2.  更新一条记录

                db.student.updateOne({"name":"lihaijie"},{$set:{"age":40}});             

        4.  db.collection.updateMany()  更新多条文档

            1.  语法

db.collection.updateMany(
   <filter>,
   <update>,
   {
     upsert: <boolean>,
     writeConcern: <document>,
     collation: <document>,
     arrayFilters: [ <filterdocument1>, ... ],
     hint:  <document|string>        // Available starting in MongoDB 4.2.1
   }
)  

            2.  更新多条记录

                db.student.updateMany({"name":"lihaijie"},{$set:{"age":100}});      

    5.  bulk批量操作

                                                                                 

6.  游标

    游标是一种容器,可以用来存放find执行结果。而放入游标中的数据无论是单条还是包括多条数据结果集,每次都只能提取一条数据

    游标一般用于遍历数据集。通过hasNext()判断是否有下一条数据,next()获取下一条数据

    例子:   

var cursor=db.student.find();
zhenpin:PRIMARY> while(cursor.hasNext()) { var temp=cursor.next() print(temp.name); }
2022-08-17T13:50:29.555+0800 E QUERY    [js] SyntaxError: missing ; before statement @(shell):1:49
zhenpin:PRIMARY> db
yangjianbo
zhenpin:PRIMARY> while(cursor.hasNext()) {
... var temp=cursor.next()
... print(temp.name);
... }
liudehua
akun
zhangxueyou
zhangxueyou

  

        

                                   

posted @ 2022-08-17 15:45  奋斗史  阅读(179)  评论(0)    收藏  举报