mongodb基础用法

738 阅读3分钟

本文主要是学习mongodb数据库的语法

数据库连接

后端数据库连接语法:

mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
  1. mongodb:// 是固定搭配,
  2. 后边是可选参数用户名加密码,
  3. host是要连接服务器的地址,
  4. portx是指定的端口,默认27017
  5. database如果指定username:password@,连接并验证登录指定数据库。若不指定,默认打开 test 数据库。
  6. options是连接选项。如果不使用/database,则前面需要加上/。所有连接选项都是键值对name=value,键值对之间通过&或;(分号)隔开

例子如: 使用用户名niu,密码root登录localhost的project数据库。

mongodb://niu:root@localhost/project

创建数据库

创建数据库

use project2
db

效果如下

image.png

显示所有数据库

show dbs

image.png

往project2中插入一条数据

db.project2.insert({"name":"11111"})
show dbs

结果如下

image.png

删除数据库

db.dropDatabase()
show dbs

结果如下,已删除project2数据库

image.png

创建集合

use test
db.createCollection("project2")

创建了test数据库,test数据库创建了project2集合

image.png

删除集合

db.project2.drop()

image.png

插入文档

db.COLLECTION_NAME.insertOne(document)
db.COLLECTION_NAME.replaceOne(document)

参数有三:

  1. Document要写入的文档。
  2. writeConcern写入策略,默认为 1,即要求确认写操作,0 是不要求。
  3. ordered指定是否按顺序写入,默认 true,按顺序写入。
db.demo1.insertOne({title: 'title', 
    description: 'description',
    arr: ['1', '2', '3'],
})

image.png

更新文档

MongoDB 使用 update() 和 save() 方法来更新集合中的文档

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

结果如下:

image.png

删除文档

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

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

image.png

db.demo1.remove({'title':'title'},1)

db.demo1.find()

从三条数据,删为两条

image.png

查询文档

db.collection.find(query, projection)
  1. query :可选,使用查询操作符指定查询条件
  2. projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)
db.demo1.find().pretty()

image.png

and条件查询

db.col.find({key1:value1, key2:value2}).pretty()
db.demo1.find({'title':'title3','description':'description'}).pretty()

image.png

or条件

db.demo1.find({$or:[{"title":"title2"},{"title": "title3"}]}).pretty()

image.png

条件操作符

先插入三条数据

image.png

大于>

db.demo1.find({likes : {$gt : 1}})

结果如下

image.png

大于等于>=

db.demo1.find({likes : {$gte : 1}})

image.png

小于<

db.demo1.find({likes : {$lt : 2}})

image.png

小于等于<=

db.demo1.find({likes : {$lte : 2}})

image.png

取中间值

db.demo1.find({likes : {$lt :3, $gt : 1}})

image.png

$type 操作符

查询数据类型 常见的Double,String,Object,Array,Boolean,Date等等

db.demo1.find({"likes" : {$type : 'number'}})

image.png

Limit与Skip方法

limit查询条数

db.demo1.find().limit(2)

image.png

skip跳过多少条

db.demo1.find().limit(2).skip(1)

image.png

排序

1 为升序排列,而 -1 是用于降序排列。

db.demo1.find().sort({likes:1})

image.png

db.demo1.find().sort({likes:-1})

image.png

索引

db.collection.createIndex(keys, options)

语法中 Key 值为你要创建的索引字段,1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1 即可。

db.demo1.createIndex({likes:1})

image.png

聚合

db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
db.demo1.aggregate([{$group : {_id : "$tags", num_tutorial : {$sum : 1}}}])

计算tags有几个相同的

image.png

$sum 计算总和。

表达式 描述 实例

$sum 计算总和。

db.demo1.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])

$avg 计算平均值

db.demo1.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])

$min 获取集合中所有文档对应值得最小值

db.demo1.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])

$max 获取集合中所有文档对应值得最大值。

db.demo1.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])

$push 在结果文档中插入值到一个数组中。

db.demo1.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])

$addToSet 在结果文档中插入值到一个数组中,但不创建副本。

db.demo1.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])

$first 根据资源文档的排序获取第一个文档数据。

db.demo1.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])

$last 根据资源文档的排序获取最后一个文档数据

db.demo1.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])