zoukankan      html  css  js  c++  java
  • mongodb 语法小结

    数据库

    一个mongodb中可以建立多个数据库。

    MongoDB的默认数据库为"db",该数据库存储在data目录中。

    MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。

    "show dbs" 命令可以显示所有数据的列表。

    执行 "db" 命令可以显示当前数据库对象或集合。

    运行"use"命令,可以连接到一个指定的数据库。

    > show dbs
    admin   0.000GB
    config  0.000GB
    local   0.000GB
    > db
    admin
    > use local
    switched to db local
    > show users
    > use admin
    switched to db admin
    > use local
    switched to db local
    > db
    local

    数据库也通过名字来标识。数据库名可以是满足以下条件的任意UTF-8字符串。

    • 不能是空字符串("")。
    • 不得含有' '(空格)、.、$、/、和 (空字符)。
    • 应全部小写。
    • 最多64字节。

    有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库。

    • admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
    • local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
    • config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
    创建数据库
    user dbname
    > use test
    switched to db test
    > show dbs
    admin   0.000GB
    config  0.000GB
    local   0.000GB

    刚刚创建的test并不显示,需要插入数据才可以

    > db.test.insert({"name":"天王盖地虎"})
    WriteResult({ "nInserted" : 1 })
    > show dbs
    admin   0.000GB
    config  0.000GB
    local   0.000GB
    test    0.000GB

    > show dbs    -- 查看数据库列表

    > use admin   --创建admin数据库,如果存在admin数据库则使用admin数据库

    > db   ---显示当前使用的数据库名称

    > db.getName()  ---显示当前使用的数据库名称

    > db.dropDatabase()  --删当前使用的数据库

    > db.repairDatabase()  --修复当前数据库

    > db.version()   --当前数据库版本

    > db.getMongo()  --查看当前数据库的链接机器地址 

    > db.stats() 显示当前数据库状态,包含数据库名称,集合个数,当前数据库大小 ...

    > db.getCollectionNames()   --查看数据库中有那些个集合(表)

    > show collections    --查看数据库中有那些个集合(表)

    > db.person.drop()  --删除当前集合(表)person

    > db.getName()
    long
    > db.getMongo() 
    connection to 127.0.0.1:27017
    >  db.stats()
    {
            "db" : "long",
            "collections" : 2,
            "views" : 0,
            "objects" : 102,
            "avgObjSize" : 51.705882352941174,
            "dataSize" : 5274,
            "storageSize" : 49152,
            "numExtents" : 0,
            "indexes" : 2,
            "indexSize" : 49152,
            "fsUsedSize" : 8530673664,
            "fsTotalSize" : 19945680896,
            "ok" : 1
    }
    > db.getCollectionNames() 
    [ "col", "mycol" ]
    > db.version() 
    4.1.6-385-g671f529

    删除数据库

    db.dropDatabase()

    > use long
    switched to db long
    > show dbs
    admin   0.000GB
    config  0.000GB
    local   0.000GB
    > db.long.insert({"name":"Hello"})
    WriteResult({ "nInserted" : 1 })
    > show dbs
    admin   0.000GB
    config  0.000GB
    local   0.000GB
    long    0.000GB
    > db.dropDatabase()
    { "dropped" : "long", "ok" : 1 }
    > show dbs
    admin   0.000GB
    config  0.000GB
    local   0.000GB

    创建集合

    语法:db.createCollection(name, options)

    参数说明:

    • name: 要创建的集合名称
    • options: 可选参数, 指定有关内存大小及索引的选项

    options 可以是如下参数:

    > show collections
    long
    > db.createCollection("mycol", { capped : true, autoIndexId : true, size : 
    ...    6142800, max : 10000 } )
    {
            "note" : "the autoIndexId option is deprecated and will be removed in a future release",
            "ok" : 1
    }
    > show collections
    long
    mycol
    > db.mycol.count();
    0

    查看已有集合

    show collections

    // 2019/6/14 11:29:18
    // Command #1:
    // show collections;
    // Execution time: 0.0s
    // Result:
    age_totals
    col
    collection

    查看集合大小

    db.col.count();

    查看集合所有数据

    db.col.find();

    删除集合

    首先创建集合,然后再删掉,然后再查看所有集合

    show collections
    db.createCollection("weapon",{capped:true,autoIndexId:true,size:10,max:100});
    db.weapon.drop();
    show collections;

    插入文档(向集合插入数据)

    db.weapon.insert({"name":"黑切","type":"攻击"});
    db.weapon.find();

    db.weapon.insertOne({"attack":"200"});

    //向指定集合中插入多条文档数据,重复插入
    db.weapon.insertMany([{"name":"电刀"},{"name":"红帽子"}]);

    更新文档

    update() 和 save() 方法来更新集合中的文档。
    update
    db.collection.update(
       <query>,
       <update>,
       {
         upsert: <boolean>,
         multi: <boolean>,
         writeConcern: <document>
       }
    )

    参数说明:

    • query : update的查询条件,类似sql update查询内where后面的。
    • update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
    • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
    • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
    • writeConcern :可选,抛出异常的级别。

     这里说明下,如果文档集合有属性是空,可用null查询,如:

    db.weapon.find({"name":null});
    db.weapon.update({"name":null},{$set:{"name":"虚无之刃"}});

    $unset:移除集合中的键值对。

    db.weapon.update({"name":"虚无之刃"},{$unset:{"attack":""}});

    Save:方法通过传入的文档来替换已有文档

    db.weapon.save({ "_id" : ObjectId("5d03352d4cb87ff7d914c5f6"), "name" : "虚无之刃","type":"暴击" });

    注意:MongoDB 不支持 ACID 所以得自己处理。防止并发访问导致问题的思路是:

    • 加锁
    • 访问数据
    • 解锁

     保持数据不重复其他的方法:

    (1)使用符合索引唯一标识:db.collection.ensureIndex( { user: 1, title: 1, Bank: 1 }, {unique:true} )

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

    再次插入结果:

    (2)db.collection.update(<query>,<update>,{upset:true});

    db.weapon.update({"name":"冰霜之槌"},{$set:{"type":"攻击"}});
    WriteResult({ "nMatched" : 0, "nUpserted" : 0, "nModified" : 0 })
    db.weapon.update({"name":"冰霜之槌"},{$set:{"type":"攻击"}},{upsert:true});
    WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : ObjectId("5d0348d7d1fea6c6ed487c27")})

     删除文档:

    MongoDB remove()函数是用来移除集合中的数据。

    在执行remove()函数前先执行find()命令来判断执行的条件是否正确,这是一个比较好的习惯。

    现在官方推荐使用 deleteOne() 和 deleteMany() 方法

    db.collection.remove(
       <query>,
       {
         justOne: <boolean>,
         writeConcern: <document>
       }
    )

    参数说明:

    • query :(可选)删除的文档的条件。
    • justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
    • writeConcern :(可选)抛出异常的级别。
    db.weapon.remove({"name":"电刀"});

     WriteResult({ "nRemoved" : 1 })

    注意:remove() 方法 并不会真正释放空间,删除collection内的数据不会释放磁盘空间;

    //-----查看磁盘空间使用情况
     db.serverStatus().mem
    //释放空间
    db.runCommand({compact: collection-name, force: true })

     deleteOne() 和 deleteMany() 

    db.weapon.deleteOne({"name":"电刀"});

    查询文档

     待续。。。
  • 相关阅读:
    对比度受限的自适应直方图均衡化(CLAHE)
    双边滤波
    快速高斯滤波
    积分图像的应用(二):非局部均值去噪(NL-means)
    非局部均值去噪(NL-means)
    积分图像的应用(一):局部标准差 分类: 图像处理 Matlab 2015-06-06 13:31 137人阅读 评论(0) 收藏
    积分图像 分类: 图像处理 Matlab 2015-06-06 10:30 149人阅读 评论(0) 收藏
    双边滤波与引导滤波 分类: 图像处理 2015-04-29 14:52 48人阅读 评论(0) 收藏
    UE4射击小游戏原型
    UnrealEngine4 尝鲜
  • 原文地址:https://www.cnblogs.com/xiaozhuanfeng/p/10461813.html
Copyright © 2011-2022 走看看