初识 MongoDB 和 .NET Core 入门

昨天搭建完毕 MongoDB 集群 后,开始计划了解 MongoDB ,并引入使用场景,这里介绍一下学习过程中的一些笔记,帮助读者快速了解 MongoDB 并使用 C# 对其进行编码。

浅入 MongoDB MonogoDB 是什么

MongoDB 是 NoSQL 型数据库,主要特征是存储结构化数据,MongoDB 是基于分布式文件存储的开源数据库系统。

结构化数据

以往我们使用 Mysql、SqlServer 等数据库,数据都是一条条的。MongoDB 的结构化数据正是区别于这种列-行式的数据。

结构化数据具有层级关系:

例如:

{ name: "MongoDB", type: "database", count: 1, info: { x: 203, y: 102 } }

结构化数据

MongoDB 与关系型数据库

由于 MongoDB 中,没有表、行、列,因此初学 MongoDB 时可能会有困扰,这里给出一些 MongoDB 与 普通SQL数据库对应的术语。

SQL术语/概念 MongoDB术语/概念 解释/说明
database   database   数据库  
table   collection   数据库表/集合  
row   document   数据记录行/文档  
column   field   数据字段/域  
index   index   索引  
table joins     非关系型数据库,表与表之间没关系  
primary key   primary key   主键,MongoDB自动将_id字段设置为主键  

资料来源:https://www.runoob.com/mongodb/mongodb-databases-documents-collections.html

MongoDB 入门命令

使用 mongo 进入 MongoDB shell 后,可使用命令(相当于SQL)执行操作。

注: MongoDB 中,有一个自动的 _id 字段,此字段 MongoDB 自动设置为主键并自动生成值。

显示所有数据库(包含系统数据库):

show dbs

当前正在操作的数据库或集合:

db

连接到指定数据库:

use {数据库名称}

显示所有集合:

show collections # 或 show tables

查看集合中的所有文档:

# MyCollection 是集合名称 db.getCollection("MyCollection").find() db.getCollection("MyCollection").find().limit(1000).skip(0)

可能你不信,笔者百度了很久,第一页找到一篇合适的友好的 "mongoDB 查看集合中的所有文档",特别是 CSDN 的垃圾文真的多。建议别瞎折腾了,去下一个 Navicat Premium,操作的时候,底部会提示所用的命令。

使用工具查看MongoDB命令

另外 MongoDB 有很多实用工具:https://docs.mongodb.com/tools/

文档

MongoDB 中的文档(Document)即关系型数据库中的一条记录(row)、一行数据。

但, MongoDB 中,一个集合(Collection-Table)中,是不需要具有相同字段的。例如:

A 文档:

{ name: "MongoDB", type: "database", count: 1, info: { x: 203, y: 102 } }

B 文档:

{ name: "MongoDB", typeName: "database", dataCount: 1, dataInfo: { m: 203, n: 102 } } .NET Core 示例

我们从一个基础模板开始。

创建一个控制台程序,打开 Nuget 搜索并安装 MongoDB.Driver。

var client = new MongoClient("mongodb://{MongoDB}:27017"); IMongoDatabase database = client.GetDatabase("Test"); 集合

可以通过 CreateCollection() 或 CreateCollectionAsync() 创建一个集合,跟普通数据库不同的是,创建集合时是不需要指定结构的,只需要指定名称即可:

await database.CreateCollectionAsync("Test");

获取集合

GetCollection() 函数可以让我们获取到集合,如果集合不存在,则会自动创建。

IMongoCollection<TDocument> GetCollection<TDocument>()

由于同一个集合可以有不同字段和字段类型的文档,因此几个文档如果有所差别,是很难统一起来的,例如:

集合的文档字段不同

(N/A) 代表此文档没有这个字段;如果一个文档有 10 个字段,另一个文档有 8 个字段,但是两者的字段完全不同时,要合并起来来,就有 18 个字段了。很明显,不应该汇集在一起,而是应该使用强类型对其 ”归档“ 。

创建两个类,分别为 Test1,Test2,其内容如下:

public class Test1 { public string Name { get; set; } } public class Test2 { public string DataType { get; set; } }

以两种文档类型获取集合:

var collection1 = database.GetCollection<Test1>("Test"); var collection2 = database.GetCollection<Test2>("Test");

这个获取集合的意思是,获取此集合中这类格式的文档的操作能力。

往集合中插入数据:

collection1.InsertOne(new Test1 { Name = "Test1" }); collection2.InsertOne(new Test2 { DataType = "Test2" }); // await collection.InsertOneAsync(object);

启动,查看结果。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyfffy.html