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字符串。

  • 不能是空字符串("")。
  • 不得含有‘ ‘(空格)、.、$、/、\和\0 (空字符)。
  • 应全部小写。
  • 最多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":"电刀"});

查询文档

待续。。。

原文地址:https://www.cnblogs.com/xiaozhuanfeng/p/10461813.html

时间: 2024-10-15 09:11:02

mongodb 语法小结的相关文章

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

本文整理了一年多以来我常用的MongoDB操作,涉及mongo-shell.pymongo,既有运维层面也有应用层面,内容有浅有深,这也就是我从零到熟练的历程. MongoDB的使用之前也分享过一篇,稍微高阶点:见这里:<MongoDB使用小结> 1.shell登陆和显示 假设在本机上有一个端口为17380的MongoDB服务,假设已经把mongo bin文件加入到系统PATH下. 登陆:mongo --port 17380 显示DB:show dbs 进入某DB:use test_cswuy

mongodb语法备份(转)

mongodb语法 MongoDB的好处挺多的,比如多列索引,查询时可以用一些统计函数,支持多条件查询,但是目前多表查询是不支持的,可以想办法通过数据冗余来解决多表查询的问题. 查询colls所有数据 db.colls.find() //select * from colls 通过指定条件查询 db.colls.find({‘last_name’: ‘Smith’});//select * from colls where last_name=’Smith’ 指定多条件查询 db.colls.f

Mongodb语法总结

mongodb与mysql命令对比 传统的关系数据库一般由数据库(database).表(table).记录(record)三个层次概念组成,MongoDB是由数据库(database).集合(collection).文档对象(document)三个层次组成.MongoDB对于关系型数据库里的表,但是集合中没有列.行和关系概念,这体现了模式自由的特点. MySQL MongoDB 说明 mysqld mongod 服务器守护进程 mysql mongo 客户端工具 mysqldump mongo

MongoDB语法与现有关系型数据库SQL语法比较

进入,查看,使用 进入 mongodb show dbs use mydatabase show collections db["mycol"].find({},{_id:0,name:1}) # 第一个参数为条件,第二个参数为显示结果设置 db["mycol"].inseret({"key":"value",title:"tutorial",name:"jkmiao"})   Mong

Swift 语法小结

Swift 语法小结 1.  Optional 就是枚举 An Optional is just an enum enum Optional<T>{ case None case Some(T) } 2.Array的声明 var a=Array<String>() var a=[String]() let a=["A","B","C"]不可改 let b=a[3] 遍历Array可使用for in for array in

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

MongoDB学习小结

启动对应server:cd:到mangodb安装根目录下 mongod --dbpath db路径 创建MangoDB服务: mongod.exe --logpath d:/mongodb/logs/mongodb.log --logappend --dbpath d:/mongodb/db --directoryperdb --serviceName MongoDB -install 补充一下三个命令:(必须以管理员身份运行cmd,然后执行下面的命令) 启动MongoDB:net start

XML语法小结

语法结构主要要求: (1)有且仅有一个根元素. 根元素也称文档元素,整个 XML 文档的其他元素都包含在根元素中,并通过嵌套形成树 型结构.除了根元素外,其他元素都是子元素. (2)每个元素必须有开始标记和结束标记,除非用特定的空元素标记"<元素/>":  开始标记的格式是:<标记名称> 结束标记的格式是:</标记名称> 开始标记和结束标记将 XML 文档中的数据进行结构化组织,确定元素内容.范围和相互 关系. (3)元素必须正确嵌套.元素嵌套时不允

MongoDB使用小结:一些不常见的经验分享

最近一年忙碌于数据处理相关的工作,跟MongoDB打交道极多,以下为实践过程中的Q&A,后续会不定期更新补充. 1.count统计结果错误 这是由于分布式集群正在迁移数据,它导致count结果值错误,需要使用aggregate pipeline来得到正确统计结果,例如: db.collection.aggregate([{$group: {_id: null, count: {$sum: 1}}}]) 引用:“On a sharded cluster, count can result in a