MongoDB

本文详细介绍了如何在MongoDB中创建数据库和集合,包括使用`use`命令、`insert`操作,创建索引,以及执行查询、更新和删除文档的方法。还涉及了正则表达式在模式匹配中的应用和用户管理权限设置。
摘要由CSDN通过智能技术生成

MongoDB如何创建数据库和集合 | MongoDB中文社区

运行

在 wrap 里面输入,mongo

  使用aggregate()统计,可进行分组

使用“use”命令创建数据库

“use”命令创建MongoDB中的数据库。如果数据库不存在,将创建一个新的数据库

如:

use 数据库名

使用insert()创建集合/表

创建集合的最简单方法是一条记录(不过是由字段名称和值组成的文档)插入到集合中。如果该集合不存在,则会创建一个新的集合如:

db.集合名.insert(

{

“键”:”值”

}

)

注意:键可带双引号,可不带双引号

使用insert()命令添加文档

MongoDB提供insert()命令将文档插入到集合中

db.集合名.insert(

{

“键”:”值”

}

)

使用insert()在MongoDB中插入数组

“insert”命令也可以一次将多个文档插入到集合中

1)创建一个名为myEmployee 的JavaScript变量来保存文档数组

2)将具有字段名称和值的所需文档添加到变量

3)使用insert命令将文档数组插入集合中

如:

let myEmployee=[{“键”:”值”},{“键”:”值”}]
db.集合名.insert(myEmployee)

插入多条是 insertMany

以JSON格式打印

db.集合名.find().forEach(printjson)

printjson命令放入forEach语句。这将导致集合中的每个文档以JSON格式显示

MongoDB主键:使用ObjectId()设置_id字段

在MongoDB中,_id字段是集合的主键,以便可以在集合中唯一地标识每个文档。_id字段包含唯一的ObjectId值。

默认情况下,在集合中插入文档时,如果您没有在字段名称中添加带有_id的字段名称,则MongoDB将自动添加一个ObjectId字段

如果要确保在创建集合时MongoDB不会创建_id字段,并且要指定自己的ID作为集合的_id,则需要在创建集合时明确定义它。

在显式创建id字段时,需要使用名称中的_id创建它。如:

db.集合名.insert({_ id:10,“ EmployeeName”:“ Smith”})

使用find()查询MongoDB中的文档

若查找全部参数可为空 

db.集合名.find()

查询条件是一个空对象 {},表示没有限制条件,因此会将数据库中的所有文档都返回

db.集合名.find({EmployeeName : "Smith"}).forEach(printjson);

db.集合名.find({“EmployeeName” : "Smith”})—>mongo的键可带双引号,可不带双引号

EmployeeName : "Smith”—>过滤条件

db.集合名.find({Employeeid : {$gt:2}}).forEach(printjson);

 表达式

$lt:小于

$eq:等于

$ne:不等于

$gt:大于

$lt:小于

游标教程

当使用db.collection.find()函数在集合中搜索文档时,结果将返回指向文档集合的指针,该指针称为游标。

var myEmployee = db.Employee.find( { Employeeid : { $gt:2 }});

   while(myEmployee.hasNext())    

      {

                 print(tojson(myEmployee.next()));

}

在Iterator类中,我们经常用到两个方法: hasNext(), next(),

具体含义: next(),  是返回当前元素, 并指向下一个元素。

           hasNext(), 则是判断当前元素是否存在,并指向下一个元素(即所谓的索引)

 limit查询结果

db.集合名.find().limit(2).forEach(printjson);

使用limit子句将要返回的文档数限制为2

按降序排序

db.集合名.find().sort({Employeeid:-1}).forEach(printjson)

采用sort函数,该函数返回集合中的所有文档,然后使用修饰符更改返回记录的顺序。这里的-1表示我们要根据Employee id的降序返回文档。值为1则按照升序

 count()函数

db.集合名.count() 查询集合中文档的数量是多少

使用update()更新文档

  1. 发出更新命令;
  2. 选择要用于确定需要更新哪个文档的条件。例子中,我们要更新员工ID为1的文档;
  3. 使用set命令修改字段名称;
  4. 选择要修改的字段名称,并相应地输入新值。
db.集合名.update(

{“Employeeid” : 1},{$set: { “EmployeeName” : “NewMartin”}});

删除文件

所有文档将从集合中删除

db.集合名.remove()

删除符合特定条件的文档

db.集合名.remove({Employeeid:22}) 

更新多个值

为了确保在MongoDB中同时更新多个/大量文档,需要使用multi选项,因为默认情况下,一次只能修改一个文档。

// 更新多条数据

db.数集合名update({'title':'MongoDB 教程'},{$set:{'name':'MongoDB'}},{multi:true})

索引

 查找集合中的所有索引:

db.集合名.getIndexes()

创建索引:createIndex()

 单字段索引

db.集合名.createIndex({Employeeid:1})

复合索引

db.集合名.createIndex({Employeeid:1, EmployeeName:1])

删除索引:dropindex()

dropIndexes方法将删除除_id索引以外的所有索引

db.集合名.dropIndex(Employeeid:1)

请记住,每个集合都有_id字段,该字段也算作索引的Field值。由于_id索引字段在最初创建时是集合的一部分,因此numIndexesBefore的值为1

索引就是将文档按照某个(或某些)字段顺序组织起来,以便能根据该字段高效的查询

建立索引后,MongoDB会额外存储一份按age字段升序排序的索引数据,索引结构类似如下,索引通常采用类似btree的结构持久化存储,以保证从索引里快速(O(logN)的时间复杂度)找出某个age值对应的位置信息,然后根据位置信息就能读取出对应的文档。

db.person.getIndexes() // 查询集合的索引信息

[

    {

        "ns" : "test.person",  // 集合名

        "v" : 1,               // 索引版本

        "key" : {              // 索引的字段及排序方向

            "_id" : 1           // 根据_id字段升序索引

        },

        "name" : "_id_"        // 索引的名称

    }

]

复合索引能满足的查询场景比单字段索引更丰富,不光能满足多个字段组合起来的查询,比如db.person.find( {age: 18, name: "jack"} ),也能满足所以能匹配符合索引前缀的查询,这里{age: 1}即为{age: 1, name: 1}的前缀,所以类似db.person.find( {age: 18} )的查询也能通过该索引来加速;但db.person.find( {name: "jack"} )则无法使用该复合索引。如果经常需要根据『name字段』以及『name和age字段组合』来查询,则应该创建如下的复合索引:

db.person.createIndex( {name: 1, age: 1} ) 

正则表达式

使用$ regex运算符进行模式匹配

db.集合名.find({EmployeeName : {$regex: “Gu” }}).forEach(printjson)

查找所有带有字符“ Gu”的EmployeeName。因此,我们指定$ regex运算符来定义“ Gu”的搜索条件

db.集合名.find({EmployeeName : {$regex: “^Guru99$”}}).forEach(printjson)

在搜索条件中,我们使用^和$字符。^用于确保字符串以特定字符开头,而$用于确保字符串以特定字符结尾

与$ options进行模式匹配

使用不区分大小写参数的$ options,带“ i”参数(表示不区分大小写)的$ options

db.集合名.find({EmployeeName:{$regex: “Gu”,$options:’i’}}).forEach(printjson)

没有regex运算符的模式匹配

不用regex运算符也可以进行模式匹配。

db.集合名.find({EmployeeName: /Gu/’}).forEach(printjson)

 “//”选项基本上意味着在这些定界符中指定搜索条件。因此,我们指定/ Gu /再次查找其EmployeeName中具有“ Gu”的文档

从集合中获取最后一个’n’个文档

db.集合名.find().sort({_id:-1}).limit(2).forEach(printjson)

1、查询文档时,请使用sort函数根据集合中的_id字段值以相反的顺序对记录进行排序。-1基本上表示按相反顺序或降序对文档进行排序,以便最后一个文档成为要显示的第一个文档。

2、然后使用limit子句仅显示所需的记录数。

正则表达式 总结:

  • 模式匹配可以通过$ regex运算符实现。该运算符可用于在集合中查找某些字符串。
  • ^和$符号可用于精确的文本搜索,其中^用于确保字符串以特定字符开头,而$用于确保字符串以特定字符结尾。
  • ‘i’和$ regex运算符可用于指定不区分大小写的字符串,以便可以搜索字符串(小写还是大写)。
  • 分隔符//也可用于模式匹配。
  • 结合使用sort和limit函数可以返回集合中的最后n个文档。可以使用sort函数以降序返回文档,之后可以使用limit子句来限制要返回的文档数。

(创建/删除集合)

显式创建集合语法:db.createCollection(name,options)   

    参数name是集合名称,该createCollection可用insert代替

删除集合语法:

db.集合名.drop()

创建管理员用户

db.createUser(

{       user: "Guru99",

pwd: "password",

roles:[{role: "userAdminAnyDatabase" , db:"admin"}]})
db.createUser(

{

user: "Employeeadmin",

pwd: "password",

roles:[{role: "userAdmin" , db:"Employee"}]})

修改mongo配置(开启后,每一个数据库都需要进行验证)

sudo vi /etc/mongod.conf 修改为#security:为security: authorization: enabled

校验用户:

db.auth('Employeeadmin','password’)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pomelo-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值