mongodb-9.数据库连接,集合创建

news2025/1/12 21:30:50

文章目录

    • 数据库连接
    • 集合创建
    • 查询
    • 删除
    • 查询显示指定字段
    • 限制查询条数 limit ,skip
    • 排序
    • 索引创建
    • 聚合查询

数据库连接

mongodb URL

mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]

语法说明如下:

  • mongodb://:这是固定的格式,必须要指定;
  • username:password@:可选项,如果设置,在连接数据库服务器之后,驱动会尝试以给出的用户名(username)和密码(password)登录这个数据库;
  • host1:必填参数,用来指定要连接服务器的地址,如果要连接复制集,则需要指定多个主机地址;
  • portX:可选项,用来指定端口,如果不填,默认为 27017; /database:可选项,如果指定了
  • username:password@,则连接并验证登录指定的数据库,若不指定,则默认打开 test 数据库;
  • ?options:可选项,用来定义连接选项,连接选项的可选值如下表所示,如果不使用
  • /database,则前面需要使用/与前面的内容分隔,所有连接选项都是键值对 name=value
    的形式,键值对之间通过&或;(分号)隔开。

在这里插入图片描述

下面通过一些简单的示例来演示一下:

连接到一个运行在本机的,端口为 27017 的 MongoDB:

mongodb://localhost

连接到一个运行在本机的,端口为 27017 的 MongoDB,并以用户名"fred"和密码"foobar"登录,登录后将默认使用 admin 数据库:

mongodb://fred:foobar@localhost

连接到一个运行在本机的,端口为 27017 的 MongoDB,并以用户名"fred"和密码"foobar"登录,登录后使用 baz 数据库:

mongodb://fred:foobar@localhost/baz

连接到一个 replica pair,一台服务器在 c.biancheng.net,另一台在 www.biancheng.net:

mongodb://c.biancheng.net:27017,www.biancheng.net:27017

连接到本机的一个 replica set,端口分别为 27017、27018、27019:

mongodb://localhost,localhost:27018,localhost:27019

连接 replica set 中的三台服务器, 写入操作应用在主服务器 并且分布查询到从服务器:

mongodb://host1,host2,host3/?slaveOk=true

直接连接第一个服务器,无论该服务器是否为 replica set 的一部分,也无论它是主服务器还是从服务器:

mongodb://host1,host2,host3/?connect=direct;slaveOk=true

注意:上述的连接主要用于在您偏好使用某台服务器,但又有可供替换的服务器时。

使用安全模式连接到 localhost:

mongodb://localhost/?safe=true

以安全模式连接到 replica set,并且等待至少两个复制服务器成功写入,超时时间设置为 2 秒:

mongodb://host1,host2,host3/?safe=true;w=2;wtimeoutMS=2000

集合创建

db.createCollection(name, options)

参数说明如下:
name: 要创建的集合名称;
options: 可选参数, 指定有关内存大小及索引的选项,可选值如下表所示:

在这里插入图片描述
当我们在集合中插入文档时,MongoDB 会首先检查固定集合的 size 字段,然后检查 max 字段。

> db.createCollection("mycol", { capped : true, autoIndexId : true, size : 102400, max : 1000 } )
{
    "note" : "the autoIndexId option is deprecated and will be removed in a future release",
    "ok" : 1
}
> show tables
mycol

删除集合

db.mycol.drop()

循环插入

rsb:PRIMARY> for(var i=1;i<=10;i++){
... db.user.insert({name:"user"+i,age:20+i,phone:"18900898777"})
... }
WriteResult({ "nInserted" : 1 })

此外,还有insertOne,insertMany

查询

db.mycol.insert([
... {
... title: "MongoDB教程",
... description: "MongoDB 是一个 Nosql 数据库",
... by: "编程帮",
... url: "http://www.biancheng.net",
... tags: ["mongodb", "database", "NoSQL"],
... likes: 999
... },
... {
... title: "NoSQL数据库",
... description: "NoSQL数据库中没有数据表",
... by: "编程帮",
... url: "http://www.biancheng.net",
... tags: ["mongodb", "database", "NoSQL"],
... likes: 100,
... comments: [
...     {
...         user:"admin",
...         message: "第一个评论",
...         dateCreated: new Date(2021,01,10,2,35),
...         like: 0
...     }
... ]
... }
... ])

db.mycol.find()
db.collection_name.find(query, projection).pretty()
db.mycol.find().pretty()
db.mycol.findOne({title:“MongoDB教程”})
在这里插入图片描述

删除

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

例如

db.course.remove({‘title’:‘MongoDB教程’},{justOne:true})

全量删除

db.course.remove({})
db.course.count() 此时个数是0

查询显示指定字段

rsb:PRIMARY> db.mycol.find()
{ "_id" : ObjectId("63aa8fdd15d5e335bebf0172"), "title" : "MongoDB", "description" : "MongoDB  Nosql ", "by" : "", "url" : "http://www.biancheng.net", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 999 }
{ "_id" : ObjectId("63aa8fdd15d5e335bebf0173"), "title" : "NoSQL", "description" : "NoSQL荼", "by" : "", "url" : "http://www.biancheng.net", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100, "comments" : [ { "user" : "admin", "message" : "", "dateCreated" : ISODate("2021-02-09T18:35:00Z"), "like" : 0 } ] }
rsb:PRIMARY> db.mycol.find({},{title:1})
{ "_id" : ObjectId("63aa8fdd15d5e335bebf0172"), "title" : "MongoDB" }
{ "_id" : ObjectId("63aa8fdd15d5e335bebf0173"), "title" : "NoSQL" }
rsb:PRIMARY> db.mycol.find({},{title:1,_id:0})
{ "title" : "MongoDB" }
{ "title" : "NoSQL" }
rsb:PRIMARY> 

限制查询条数 limit ,skip

rsb:PRIMARY> db.course.find().limit(1)
{ "_id" : ObjectId("63aa958d6921a45cb71a7af8"), "title" : "MongoDB", "author" : "", "url" : "http://www.biancheng.com/mongodb/index.html" }
rsb:PRIMARY> db.course.find()
{ "_id" : ObjectId("63aa958d6921a45cb71a7af8"), "title" : "MongoDB", "author" : "", "url" : "http://www.biancheng.com/mongodb/index.html" }
{ "_id" : ObjectId("63aa958d6921a45cb71a7af9"), "title" : "HTML", "author" : "", "url" : "http://www.biancheng.com/html/index.html" }
{ "_id" : ObjectId("63aa958d6921a45cb71a7afa"), "title" : "C#", "author" : "", "url" : "http://www.biancheng.com/csharp/index.html" }
rsb:PRIMARY> db.course.find().skip(3)
rsb:PRIMARY> db.course.find().skip(2)
{ "_id" : ObjectId("63aa958d6921a45cb71a7afa"), "title" : "C#", "author" : "", "url" : "http://www.biancheng.com/csharp/index.html" }
rsb:PRIMARY> db.course.find().skip(0)
{ "_id" : ObjectId("63aa958d6921a45cb71a7af8"), "title" : "MongoDB", "author" : "", "url" : "http://www.biancheng.com/mongodb/index.html" }
{ "_id" : ObjectId("63aa958d6921a45cb71a7af9"), "title" : "HTML", "author" : "", "url" : "http://www.biancheng.com/html/index.html" }
{ "_id" : ObjectId("63aa958d6921a45cb71a7afa"), "title" : "C#", "author" : "", "url" : "http://www.biancheng.com/csharp/index.html" }
rsb:PRIMARY> db.course.count()
3

排序

rsb:PRIMARY> db.course.find({},{_id:0,title:1}).sort({})  默认按照_id升序排列
{ "title" : "MongoDB" }
{ "title" : "HTML" }
{ "title" : "C#" }
rsb:PRIMARY> db.course.find({},{_id:0,title:1}).sort({title:-1}) 按照title降序排序
{ "title" : "MongoDB" }
{ "title" : "HTML" }
{ "title" : "C#" }
rsb:PRIMARY> db.course.find({},{_id:0,title:1}).sort({title:1})
{ "title" : "C#" }
{ "title" : "HTML" }
{ "title" : "MongoDB" }

索引创建

rsb:PRIMARY> db.course.createIndex({title:1})
{
        "createdCollectionAutomatically" : false,
        "numIndexesBefore" : 1,
        "numIndexesAfter" : 2,
        "commitQuorum" : "votingMembers",
        "ok" : 1,
        "$clusterTime" : {
                "clusterTime" : Timestamp(1672124587, 7),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        },
        "operationTime" : Timestamp(1672124587, 7)
}
rsb:PRIMARY> db.course.getIndexes()
[
        {
                "v" : 2,
                "key" : {
                        "_id" : 1
                },
                "name" : "_id_"
        },
        {
                "v" : 2,
                "key" : {
                        "title" : 1
                },
                "name" : "title_1"
        }
]
rsb:PRIMARY> 

删除索引

rsb:PRIMARY> db.course.dropIndex({title:1}) --删除指定索引
{
        "nIndexesWas" : 2,
        "ok" : 1,
        "$clusterTime" : {
                "clusterTime" : Timestamp(1672124846, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        },
        "operationTime" : Timestamp(1672124846, 1)
}
rsb:PRIMARY> db.course.getIndexes()
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
rsb:PRIMARY> 

db.collection_name.dropIndexes() 可以删除除了_id以外的所有索引

聚合查询

db.course.aggregate([{$group : {_id : "$author", sum : {$sum : 1}}}])
{ "_id" : "编程帮", "sum" : 3 }

上述示例类似于 SQL 语句中的SELECT author, count(*) FROM course GROUP BY author。

在这里插入图片描述

下面介绍了聚合框架中几个常用的操作:

$project:用于从集合中选择要输出的字段;
$match:用于过滤数据,只输出符合条件的文档,可以减少作为下一阶段输入的文档数量;
$group:对集合中的文档进行分组,可用于统计结果;
$sort:将输入文档进行排序后输出;
$skip:在聚合管道中跳过指定数量的文档,并返回余下的文档;
$limit:用来限制 MongoDB 聚合管道返回的文档数量;
$unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。

下面通过几个简单的示例来演示 MongoDB 中管道的使用:

使用 $project 来选择要输出的字段:

rsb:PRIMARY> db.course.aggregate({$project:{title:1,author:1}}).pretty()
{
        "_id" : ObjectId("63aa958d6921a45cb71a7af8"),
        "title" : "MongoDB",
        "author" : "BIANCHENGBANG"
}
{
        "_id" : ObjectId("63aa958d6921a45cb71a7af9"),
        "title" : "HTML",
        "author" : ""
}
{
        "_id" : ObjectId("63aa958d6921a45cb71a7afa"),
        "title" : "C#",
        "author" : ""
}
rsb:PRIMARY> 

使用$skip跳过指定的文档

rsb:PRIMARY> db.course.aggregate({$skip:2}).pretty()
{
        "_id" : ObjectId("63aa958d6921a45cb71a7afa"),
        "title" : "C#",
        "author" : "",
        "url" : "http://www.biancheng.com/csharp/index.html"
}
rsb:PRIMARY> 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/117901.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JSP ssh网络点餐系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 JSP ssh网络点餐系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式 开发。开发环境为TOMCAT7.0,Mye…

vue3 antd项目实战——input输入框限制输入内容和长度,Form表单动态校验规则

input输入框设置只能输入中文&#xff0c;输入长度为20&#xff0c;输入不能为空知识调用场景复现解决方案1.下方有提示文字2.限制输入内容只能是中文3.限制输入长度为204.动态校验规则&#xff08;必填项&#xff09;input源代码&#xff08;按需调整即可&#xff09;知识调用…

【区块链 | EVM】深入理解学习EVM - 深入理解EVM操作码,让你写出更好的智能合约

那些非典型的开销导致经典的软件设计模式在合约编程语言中看起来既低效又奇怪。如果想要识别这些模式并理解他们导致效率变高/低的原因&#xff0c;你必须首先对以太坊虚拟机&#xff08;即 EVM&#xff09;有一个基本的了解。 你的一些编程“好习惯”反而会让你写出低效的智能…

Linux当中的Sersync实时同步服务及其实战举例

目录 一、实时同步 1.定义 2.原理 3.实时同步场景 4.实时同步工具 &#xff08;1&#xff09;sersync &#xff08;2&#xff09;Lysncd 二、实时同步实例 1.环境规划 2.配置思路 NFS存储服务如下&#xff1a; &#xff08;1&#xff09;安装NFS &#xff08;2&am…

40. 使用块的网络(VGG)

虽然AlexNet证明深层神经网络卓有成效&#xff0c;但它没有提供一个通用的模板来指导后续的研究人员设计新的网络。 在下面的几个章节中&#xff0c;我们将介绍一些常用于设计深层神经网络的启发式概念。 与芯片设计中工程师从放置晶体管到逻辑元件再到逻辑块的过程类似&#x…

Node.js--》三大常见模块的使用讲解

目录 fs文件系统模块 fs.readFile()方法 fs.writeFile()方法 readFile与writeFile的使用 fs模块路径动态拼接问题 path路径模块 path.join()方法 path.basename() path.extname() path.parse() http模块 req请求对象 res响应对象 解决中文乱码问题 响应不同内容…

Python实现猎人猎物优化算法(HPO)优化支持向量机回归模型(SVR算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 猎人猎物优化搜索算法(Hunter–prey optimizer, HPO)是由Naruei& Keynia于2022年提出的一种最新的优…

计算机系统基础实验 - 同符号浮点数加法运算/无符号定点数乘法运算的机器级表示

实验3 同符号浮点数加法运算/无符号定点数乘法运算的机器级表示 实验序号&#xff1a;3 实验名称&#xff1a;同符号浮点数加法运算/无符号定点数乘法运算的机器级表示 适用专业&#xff1a;软件工程 学 时 数&#xff1a;2学时 一、实验目的 1.掌握定点数乘法溢出的判定方法…

Kafka触发Rebalance的场景分析

文章目录前言触发Rebalance的原因1. 消费者成员发生变化2. 分区数发生变化3. 订阅Topic发生变化Rebalance全流程介绍场景一&#xff1a;新成员入组场景二&#xff1a;成员主动离组场景三&#xff1a;成员崩溃离组场景四&#xff1a;组成员提交位移前言 所谓Rebalance就是让Con…

Python小工具-复制嵌套目录下的多个word文档到指定目录

文章目录Python小工具-复制嵌套目录下的多个word文档到指定目录需求原始数据工具实现思路代码实现1-6 配置项目7 定义file_type_to_reduce_dir函数完成文件复制或移动8 定义list_dir_by_level函数完成遍历调用函数并执行待改进地方完整代码自我反省Python小工具-复制嵌套目录下…

全志 Linux 系统启动优化 启动优化速度方式 优化启动流程 优化uboot 优化kernel等

文章目录1 概述2 启动速度优化简介2.1 启动流程2.2 测量方法2.2.1 printk time2.2.2 initcall_debug2.2.3 bootgraph.2.2.4 bootchart2.2.5 gpio 示波器.2.2.6 grabserial.2.3 优化方法2.3.1 boot0启动优化2.3.1.1 非安全启动.2.3.1.2 安全启动2.3.2 uboot启动优化2.3.2.1 完全…

07、SpringCloud 系列:Alibaba - 介绍

SpringCloud 系列列表&#xff1a; 文章名文章地址01、Eureka - 集群、服务发现https://blog.csdn.net/qq_46023503/article/details/12831902302、Ribbon - 负载均衡https://blog.csdn.net/qq_46023503/article/details/12833228803、OpenFeign - 远程调用https://blog.csdn.…

一套ASP.NET优惠券领取微信小程序源码(前台+后台)

ASP.NET优惠券领取微信小程序源码&#xff08;前台后台&#xff09; 源码免费分享&#xff01;需要源码学习可私信我。 一、源码特点 1、这是一个微信小程序对接淘宝的淘宝客api自助搜索优惠券领取程序&#xff0c;简单易学。 2、后台采用asp.netMvc框架开发、实现了调用阿里妈…

Java I/O(五)NIO应用之Netty

Netty 目录Netty1 Netty概览2 Netty核心组件2.1 Bootstrap和ServerBootStrap&#xff08;启动引导类&#xff09;2.2 Channel&#xff08;网络操作抽象类&#xff09;2.3 EventLoop&#xff08;事件循环&#xff09;2.4 EventLoopGroup&#xff08;事件循环组&#xff09;2.7 C…

【Vue】创建 Vue 实例与对象配置、容器与实例的关系、插值延伸和 Vue 开发工具的初步使用

创建 Vue 实例 引入 Vue 注意在 Head 中 <script type"text/javascript" src"./vue.js"></script>另一个 javascript 中创建 Vue 实例&#xff0c;注意在 Body 尾部 <script type"text/javascript">const x new Vue() <…

12. 目前常用的四种信道复用方式:()、()、()和() ---- 计算机网络

目前常用的四种信道服用方式&#xff1a;&#xff08;频分复用&#xff09;、&#xff08;时分复用&#xff09;、&#xff08;码分复用&#xff09;和&#xff08;波分复用&#xff09; 知识点 复用&#xff08;multiplexing&#xff09;&#xff1a;就是在一个信道上传输多路…

java SE阶段面试题

目录 1、Java 的数据类型有哪些&#xff1f; 2、变量的三要素是什么&#xff1f;变量使用有什么要求&#xff1f; 3、基本数据类型变量和引用数据类型变量有什么区别&#xff1f; 4、Java 的运算符有几种意思&#xff1f; 5、Java 的自增、自减运算符在自增变量前后有什么区…

《计算机网络》——第三章知识点

第三章思维导图 链路层的信道类型 一对一:点对点信道 —对多:广播信道 链路层要解决的问题 封装成帧 透明传输 差错检测密封&#xff0c;透气性差 封装成帧就是在一段数据的前后部分添加首部和尾部&#xff0c;这样就构成了一个帧。接收端在收到物理层上交的比特流后&#xff…

Pandas.to_csv()函数及全部参数使用方法一文详解+实例代码

目录 前言 一、基础语法与功能 二、参数说明和代码演示 1.path_or_buf 选择文件/文件路径写入 2.sep 指定分隔符 3.na_rep 指定缺少数据表示 4.float_format 指定浮点型字符串输出格式 5. columns 指定要写入的列 6.header 是否需要写入列名 7.index 是否写入行名称&am…

【实时数仓】Sugar拉取数据展示、品牌销售排行接口、品类销售占比接口和热门商品SPU排名接口的实现

文章目录一 Sugar拉取数据展示1 内网穿透&#xff08;1&#xff09;作用&#xff08;2&#xff09;工具&#xff08;3&#xff09;本机ip地址&#xff08;4&#xff09;花生壳配置2 配置组件二 品牌销售排行接口1 Sugar配置&#xff08;1&#xff09;图表配置&#xff08;2&…