共计 4268 个字符,预计需要花费 11 分钟才能阅读完成。
作者:幻好
起源:恒生 LIGHT 云社区
概述
MongoDB 是一种长久化的面向文档的数据库,用于以文档的模式存储和解决数据。
与其余的数据库管理系统一样,MongoDB 能够通过四种根本类型的数据操作来治理数据并与数据交互:
- C:创立操作,波及将数据写入数据库
- R:读取操作,查询数据库以从中检索数据
- U:更新操作,更改数据库中已存在的数据
- D:删除操作,从数据库中永恒删除数据
以上四种操作统称为 CRUD 操作,本文次要解说这四种操作的原理和命令等相干常识。
具体操作
连贯 MongoDB Server
首先在操作前,先连贯到本地或近程可应用的 MongoDB Server,如下图:
连贯 MongoDB 数据库胜利后,就能够开始创立新文档(documents
)。
创立文档
首先先重点介绍如何在 MongoDB 中创立数据文档(documents
)
比方创立一个东方明珠景点对象,可能相干信息有所在国家,城市,坐标等:
{
"name": "东方明珠",
"country": "中国",
"city": "上海",
"location": {
"lat": 121.537,
"lng": 31.258
}
}
MongoDB 的文档是用 BSON
编写的,BSON
是 JSON
的二进制模式,是不便可读的数据格式。BSON
或 JSON
文档中的所有数据都示意为采纳 field: value
模式的字段和值对。
该文档由四个字段组成,首先是景点的名称,其次是城市和国家。所有这三个字段都蕴含字符串。最初一个字段坐标:location,是一个嵌套文档,具体阐明了景点的地位坐标。
insertOne
应用 insertOne
办法将此文档插入到名为 spots
的新汇合中。顾名思义,insertOne
用于创立单个文档,而不是一次创立多个文档。
在命令行中,运行以下指令:
db.spots.insertOne(
{
"name": "东方明珠",
"country": "中国",
"city": "上海",
"location": {
"lat": 121.537,
"lng": 31.258
}
}
)
# 输入
{
"acknowledged" : true,
"insertedId" : ObjectId("61b5d4963d2fc20a8483df1a")
}
在执行此 insertOne 办法之前,须要保障未创立 spots 汇合。
通过执行这个示例 insertOne()
办法,它不仅会将文档插入到汇合中,还会主动创立汇合。该操作的输入将告诉您它已胜利执行,并提供它为新文档主动生成的 ObjectId:61b5d4963d2fc20a8483df1a
在 MongoDB 中,汇合中的每个文档都必须有一个惟一的 _id
字段作为主键,所以 _id
字段是惟一的。如果新文档插入时为设置 _id
字段,MongoDB 将主动生成一个对象标识符(以 ObjectId 对象的模式)作为 _id
字段的值。
在文档创立后,能够通过上面命令查看 spots 汇合中的对象计数来验证文档是否已插入:
> db.spots.count()
# 输入:1
insertMany
如果须要创立多个文档,如果通过 insertOne
办法一个一个地插入文档,会变的十分麻烦。所以,MongoDB 提供了 insertMany
办法,您能够应用该办法在单个操作中插入多个文档。
运行以下示例命令,该命令应用 insertMany
办法将新的景点信息插入 spots 汇合中:
db.spots.insertMany([{"name": "故宫", "city": "北京", "country": "中国", "gps": { "lat": 116.403, "lng": 39.924}},
{"name": "长城", "city": "北京", "country": "中国", "gps": { "lat": 106.384, "lng": 39.031}},
{"name": "白宫", "city": "华盛顿", "country": "美国", "gps": { "lat": 116.652, "lng": 40.121}},
{"name": "伦敦之眼", "city": "伦敦", "country": "英国", "gps": { "lat": 116.348, "lng": 34.430}}
])
请留神围绕六个文档的方括号 ([])
,这些括号示意文档数组。在方括号内,多个对象能够一个接一个呈现,以逗号分隔。在 MongoDB 办法须要多个对象的状况下,能够像这样以数组的模式提供对象列表。
MongoDB 将响应多个对象标识符,每个新插入的对象一个:
# 输入
{
"acknowledged" : true,
"insertedIds" : [ObjectId("61b5d7ba3d2fc20a8483df1b"),
ObjectId("61b5d7ba3d2fc20a8483df1c"),
ObjectId("61b5d7ba3d2fc20a8483df1d"),
ObjectId("61b5d7ba3d2fc20a8483df1e")
]
}
您能够通过查看 spots 汇合中的对象个数,来验证文档是否已插入:
> db.spots.count()
# 输入:5
查问文档
通过创立操作,spots 汇合中存储了一些文档,能够查询数据库以检索这些文档并读取它们的数据。此步骤首先概述如何查问给定汇合中的所有文档,而后形容如何应用过滤器放大检索到的文档列表。
find
实现上一步后,能够应用 find()
办法通过单个操作检索所有文档:
> db.spots.find()
# 输入:{"_id" : ObjectId("61b5d4963d2fc20a8483df1a"), "name" : "东方明珠", "country" : "中国", "city" : "上海", "location" : {"lat" : 121.537, "lng" : 31.258} }
{"_id" : ObjectId("61b5d7ba3d2fc20a8483df1b"), "name" : "故宫", "city" : "北京", "country" : "中国", "gps" : {"lat" : 116.403, "lng" : 39.924} }
{"_id" : ObjectId("61b5d7ba3d2fc20a8483df1c"), "name" : "长城", "city" : "北京", "country" : "中国", "gps" : {"lat" : 106.384, "lng" : 39.031} }
{"_id" : ObjectId("61b5d7ba3d2fc20a8483df1d"), "name" : "白宫", "city" : "华盛顿", "country" : "美国", "gps" : {"lat" : 116.652, "lng" : 40.121} }
{"_id" : ObjectId("61b5d7ba3d2fc20a8483df1e"), "name" : "伦敦之眼", "city" : "伦敦", "country" : "英国", "gps" : {"lat" : 116.348, "lng" : 34.43} }
此办法在不带任何参数的状况下应用时,不利用任何过滤并要求 MongoDB 返回指定汇合中可用的所有对象: spots。
须要留神,这些对象中的每一个都有一个您未定义的 _id 属性。如前所述,_id 字段用作它们各自文档的主键,并且是在上一步中运行 insertMany 办法时主动创立的。
为了使 find() 办法的输入更具可读性,您能够应用其 pretty
办法打印性能,如下所示:
db.spots.find().pretty()
# 输入:{"_id" : ObjectId("61b5d4963d2fc20a8483df1a"),
"name" : "东方明珠",
"country" : "中国",
"city" : "上海",
"location" : {
"lat" : 121.537,
"lng" : 31.258
}
}
{"_id" : ObjectId("61b5d7ba3d2fc20a8483df1b"),
"name" : "故宫",
"city" : "北京",
"country" : "中国",
"gps" : {
"lat" : 116.403,
"lng" : 39.924
}
}
以下 find() 办法通过承受查问过滤器文档作为参数来返回单个对象。查问过滤器文档遵循与插入到汇合中的文档雷同的构造,由字段和值组成,但它们用于过滤查问后果。应用的查问过滤器文档包含 _id 字段,以对象标识符作为值,查问指定的对象:shell
db.spots.find({"_id": ObjectId("61b5d4963d2fc20a8483df1a")}).pretty()
# 输入:{"_id" : ObjectId("61b5d4963d2fc20a8483df1a"),
"name" : "东方明珠",
"country" : "中国",
"city" : "上海",
"location" : {
"lat" : 121.537,
"lng" : 31.258
}
}
也能够在文档中通过其余字段,进行无效过滤:
db.spots.find({"country": "中国"}).pretty()
# 输入:{"_id" : ObjectId("61b5d4963d2fc20a8483df1a"),
"name" : "东方明珠",
"country" : "中国",
"city" : "上海",
"location" : {
"lat" : 121.537,
"lng" : 31.258
}
}
{"_id" : ObjectId("61b5d7ba3d2fc20a8483df1b"),
"name" : "故宫",
"city" : "北京",
"country" : "中国",
"gps" : {
"lat" : 116.403,
"lng" : 39.924
}
}
{"_id" : ObjectId("61b5d7ba3d2fc20a8483df1c"),
"name" : "长城",
"city" : "北京",
"country" : "中国",
"gps" : {
"lat" : 106.384,
"lng" : 39.031
}
}
查问过滤器文档十分弱小和灵便,可能帮忙咱们高效的查问数据。
总结
MongoDB 提供了一个弱小的查问零碎,容许依据简单的规范准确抉择感兴趣的文档,后续会持续对于 MongoDB 的应用技巧进行具体分享。
通过学习本文笔记,可能使咱们对 mongo 的根本 CRUD 操作,疾速入门,当然学习完之后还需本人入手实际。
想向技术大佬们多多取经?开发中遇到的问题何处探讨?如何获取金融科技海量资源?
恒生 LIGHT 云社区,由恒生电子搭建的金融科技业余社区平台,分享实用技术干货、资源数据、金融科技行业趋势,拥抱所有金融开发者。
扫描下方小程序二维码,退出咱们!