(第一部分)什么是MongoDB

【第一章】什么是MongoDB

1.1 认识MongoDB

MongoDB是NoSQL数据库中的佼佼者,该数据库基于灵活的JSON文档模型,非常适合敏捷式的快速开发。与此同时,其与生俱来的高可用、高水平扩展能力使得它在处理海量、高并发的数据应用时颇具优势

【第二章】体验MongoDB

2.1 windows下安装MongoDB

设置超级管理员账号密码

db = db.getSiblingDB("admin")
db.createUser({
user:'admin',
pwd:'123456',
roles:[
  {role:'clusterAdmin',db:'admin'},
  {role:'dbAdminAnyDatabase',db:'admin'},
  {role:'userAdminAnyDatabase',db:'admin'},
  {role:'readWriteAnyDatabase',db:'admin'},
]})

为数据库设置独立的登录账号

db = db.getSiblingDB("appdb")
db.createUser({
  user:'appuser',
  pwd:'appuser',
  roles:[{role:'dbOwner',db:'appdb'}
]})

开启权限验证

找到MongoDB安装目录下的bin目录中的mongod.cfg文件,开启权限验证功能:

security:
  authorization: enabled

重启MongoDB服务

2.2 连接数据库

使用mongo连接数据库,并登录超级管理员账号

// 方式一
mongo
use admin
db.auth('admin', '123456')

// 方式二
mongo admin -u admin -p 123456

(参考与出处:https://blog.csdn.net/hbtj_1216/article/details/120875957)

2.3 插入文档(增)

尝试写入一条数据

use appdb
[shell显示结果]:
switched to db appdb
db.book.insert({
  title:"my first book",
  publishedDate:new Date(),
  tags:["nosql","mongodb"],
  type:"technology",
  favCount:25,
  author:"zale"
})
[shell显示结果]:
WriteResult({ "nInserted" : 1 })

假定你有使用关系型数据库的经验,则可能会记得正确的顺序应该是:

  • 创建数据库
  • 创建数据表
  • 插入数据

然而在MongoDB中,前面的两个步骤都不是必须的,数据库、集合都是动态创建的。在首次写入数据后,我们就可以通过show collections看到对应的集合被生成了,如下:

show collections
[shell显示结果]:
book

写入更多数据

接下来,还可以继续向book集合中写入更多的数据,如下面这段代码:

var allTags = [ "nosql","mongodb","document","developer","popular" ];
var allTypes = [ "technology", "sociality", "travel", "novel", "literature" ];
var books = [];
for (var i=0; i<50; i++){
  var typeIdx = Math.floor( Math.random() * allTypes.length );
  var tagsIdx = Math.floor( Math.random() * allTags.length );
  var maxTagsCount = Math.ceil( Math.random() * allTypes.length);
  var favCount = Math.floor(Math.random() * 100 );

  var book = {
    title: "book-"+ i,
    publishedDate: new Date(),
    type: allTypes[ typeIdx ],
    tags: allTags.slice( tagsIdx,tagsIdx + maxTagsCount ),
    favCount: favCount,
    author : "zale"
  };

  books.push(book);
}
[shell显示结果]:
50
db.book.insertMany( books );
[shell显示结果]:
{
        "acknowledged" : true,
        "insertedIds" : [
                ObjectId("62a9f663c975dfcc9e32a656"),
                ObjectId("62a9f663c975dfcc9e32a657"),
                ObjectId("62a9f663c975dfcc9e32a658"),
                          ......
                ObjectId("62a9f663c975dfcc9e32a686"),
                ObjectId("62a9f663c975dfcc9e32a687")
        ]
}

2.4 查询文档(查)

2.4.1 查询全部数据

db.collection.find方法可以用于集合数据的查询

db.book.find()

2.4.3 指定数据查询

db.book.find({tags:"mongodb"})
db.book.find({type:"novel",favCount:{$gt:10}})

2.4.3 排序分页

(1)指定排序,此处俺出版时间(publishedDate)降序

db.book.find({type:'novel'}).sort({publishedDate:-1})

(2)分页查询
skip 用于指定跳过记录数,limit则用于限定返回结果数量
可以在执行find命令的同时指定skip、limit参数,以此实现分页的功能。比如,假定每页大小为8条,查询第3页的book文档,代码如下:

db.book.find().skip(16).limit(8)

可以在执行find命令的同时指定skip、limit参数,以此实现分页的功能。比如,假定每页大小为8条,查询第3页的book文档,代码如下:

db.book.findOne()

2.4.4 使用投射

投射(projection)可以让数据库只返回一部分被关注的字段,而不是整个文档。
比如,可以让数据库仅仅返回book文档中的标题(title)、收藏数(favCount)字段,代码如下:

db.book.find( {},{ title: 1,favCout: 1 }).limit(5)

2.4.5 查询限定符

比较操作符:

逻辑操作符:

数组操作符:

2.5 更新文档

2.5.1 update命令

  • query:描述更新的查询条件;
  • update:描述更新的动作及新的内容;
  • options:描述更新的选项。
db.{collection}.update(query,update,options)

1、更新单个文档

db.book.update(
{"_id":ObjectId
posted @ 2022-06-15 18:31  libai1024  阅读(50)  评论(0)    收藏  举报