Life is too short to waste a second

MongoDB 简明使用

终于还是选择了 MongoDB

https://docs.mongodb.com/manual/introduction/

数据库 (Database)

创建数据库

use DATABASE_NAME

若不存在则创建,存在则切换到此数据库

查看数据库

show dbs

删除数据库

use DATABASE_NAME
db.dropDatabase()

集合 (Collection)

集合可以理解为表,下列操作要先切换到数据中

创建集合

db.createCollection(collectionName)

在集合名后面还可以跟 option 参数,具体就面向 Google 编程吧

Tips: 在 MongoDB 中,直接插入文档到某个集合,若不存在会直接创建该集合,和前面 use DATABASE_NAME 一样

查看集合

show collections

删除集合

再看看前面出现的代码,你会发现他们的命令特别有规律,让我们来猜一猜如何删除

db.removeCollection(collectionName) // ?

其实不是这个,不过能想到这里也是极好的。我认为,为了方便,MongoDB 将集合的操作改写成db.collectionName.action 这样相比我们猜想的简洁了很多

db.user.drop() // action这里像函数,有() ,和前面的删库跑路一样

文档 (Document)

文档可以理解为record,不过它更加的灵活了,有没有发现我们在建集合的时候没有声明集合?

就像创建集合一样,创建文档也会自动在集合中新建“列”

以下操作在 user 集合中实现

创建文档

db.user.inserOne({ name: 123 })
db.user.inserMany([{ name:123 },{ newProperty: 123 }])

还有insert方法可以使用,不过既然有 one 和 many 区分它们是单个插入还是多个插入更加具有可读性

查询文档

db.user.find({ name: 123 }).skip(1).limit(1)
// select * from user where name = 123 limit 1 offset 1
db.user.find({ name: { $gt: 1 } }).skip(1).limit(1)
// select * from user where name > 1 limit 1 offset 1

需要注意的是,mongoDB 中使用操作符来筛选,比如我们第二个命令的$gt就是 greater than 的意思,$eq就是 equal 的意思,更多操作符可以查看这个网页

https://docs.mongodb.com/manual/reference/operator/query/

更新文档

db.user.updateOne(
  { _id: 123 },
  { $set: { name:321 }}
)
// 使用操作符更新多个
db.user.updateMany(
  { _id: { $gt: 1 } },
  { $set: { name:321 }}
)
// 替换
db.user.replaceOne({ _id: 123, lastName: 321 })

使用 replace 会替换掉先前文档的数据,若 id 为 123 的文档中有 name , replaceOne 会导致它失去 name,update 则不会

删除文档

和创建文档大同小异

db.user.deleteOne()
db.user.deleteMany()

Why MongoDB?

MongoDB 是灵活的,这意味这你可以自由的创建任意文档到任意集合中

听说,MongoDB 和 JavaScript 更配哦,可以看到它的相关操作很像在执行函数而不是 sql 语句,它使用 JSON。

性能方面 MongoDB 对大量数据的查询优与关系型数据库(我听说的)

分布式更加简单

When MongoDB?

我认为 MongoDB 是一个很棒的 NoSQL 数据库,但是它和关系型数据库相比:没有事务操作 4.0 已经支持,没有外键约束,(触发器?视图?)

因此,我认为将它运用在不需要高度关联(外键约束),同时,文档多变的数据(Schema Free)。例如:评论,日志等

当然,如果你懒,直接上 MongoDB 似乎也没有问题,毕竟你不用再去设计复杂的数据结构了。

发表评论

电子邮件地址不会被公开。