MongoDB简单CRUD操作(含GO中的库操作)

MongoDBCRUD操作(含GO中的库操作)

这周开始尝试做新项目,涉及到了文章的存储,查了查MongoDB在这方面用的比较多,因此对MongoDB和他在Golang中的用法进行了学习,以下是我的整理

简介

MongoDB官网:入口

MongoDB是一种文档数据库,它以其可扩展性和灵活性而闻名,能够满足各种查询和索引的需求。

它将数据存储在类似JSON的灵活文档中,这意味着字段可能因文档而异,并且数据结构可以随时间变化。

MongoDB的文档模型易于开发者学习和使用,同时具备处理任何规模复杂要求的能力。它是分布式的,因此高可用性、横向扩展和地理分布都是内置且易于使用的特性

MongoDB的特点包括:

  • 面向集合存储,易于存储对象类型的数据。
  • 模式自由,不需要预定义模式。
  • 支持动态查询,可以在任意属性上建立索引。
  • 支持复制和故障恢复,确保数据的安全性和可靠性。
  • 高效的二进制数据存储,包括大型对象(如视频)。
  • 自动处理碎片,支持云计算层次的扩展性。

MongoDB适用于需要高性能、易部署、易使用和存储数据方便的场景,如网站实时数据处理、缓存层、高伸缩性场景等。不适用于要求高度事务性的系统、传统的商业智能应用或复杂的跨文档级联查询。

安装

可参考这篇文章,不过多赘述:入口

NoSQL文档数据库

MongoDB中的结构是:db-collection-document

MongoDB将数据记录存储为BSON文档。BSON是JSON的二进制表现形式。文档由键值对构成

对字段名称有以下限制:

  1. 字段名称_id保留用作主键;它的值在集合中必须是唯一的,不可变的,并且可以是数组以外的任何类型。
  2. 字段名称不能包含null字符。
  3. 顶级字段名称不能以美元符号($)字符开头。否则,从MongoDB 3.6开始,服务器允许存储包含点(即.)和美元符号(即 $)的字段名称。

Untitled

使用文档的优点是:

文档(即对象)对应于许多编程语言中的内置数据类型。

嵌入式文档和数组减少了对昂贵连接的需求。

动态模式支持流畅的多态性。

主要操作

索引

即使从集合中删除所有文档,删除操作也不会删除索引。

原子性

MongoDB中的所有写操作都是单个文档级别的原子操作。

高性能

MongoDB提供高性能的数据持久化。特别是,

对嵌入式数据模型的支持减少了数据库系统上的I / O操作。

索引支持更快的查询,并且可以包含来自嵌入式文档和数组的键。

切换数据库

在shell中,db是指当前的数据库。键入db以显示当前数据库。

db

要切换数据库,请键入 use <db>。例如,要切换到 examples 数据库:

use examples

创建数据库

切换之前您无需创建数据库。当您第一次在数据库中存储数据时(例如在数据库中创建第一个集合),MongoDB会创建数据库。

mongosh> show dbs
admin   40.00 KiB
config  72.00 KiB
local   72.00 KiB
mongosh> use test
switched to db test
test> db.createCollection("test1")
{ ok: 1 }
test> show dbs
admin   40.00 KiB
config  72.00 KiB
local   72.00 KiB
test     8.00 KiB
test> db.dropDatabase()
{ ok: 1, dropped: 'test' }
test> show dbs
admin   40.00 KiB
config  72.00 KiB
local   72.00 KiB
test> use local
switched to db local

查找数据

test> db.test1.find()
[
  {
    _id: ObjectId('65f049c8c43bf33edd779a6c'),
    name: 'rx',
    age: 30,
    gpa: 3.2
  }
]

插入数据

test> db.test1.insertMany([{name:"rx2", age:30, gpa:3.2}, {name:"patrick", age:12, gpa:4.0}])
{
  acknowledged: true,
  insertedIds: {
    '0': ObjectId('65f04afec43bf33edd779a6d'),
    '1': ObjectId('65f04afec43bf33edd779a6e')
  }
}

test> db.test1.find()
[
  {
    _id: ObjectId('65f049c8c43bf33edd779a6c'),
    name: 'rx',
    age: 30,
    gpa: 3.2
  },
  {
    _id: ObjectId('65f04afec43bf33edd779a6d'),
    name: 'rx2',
    age: 30,
    gpa: 3.2
  },
  {
    _id: ObjectId('65f04afec43bf33edd779a6e'),
    name: 'patrick',
    age: 12,
    gpa: 4
  }
]
test> db.test1.insertOne({name:"Larry", age:"12", gpa:1.0, fullTime: false, registerDate: new Date()})
{
  acknowledged: true,
  insertedId: ObjectId('
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值