前言:
随着云计算技术的发展,NoSQL 数据库也逐渐成为了近年来数据库领域的热门话题之一。其中,MongoDB 作为非关系型数据库中的佼佼者,具有高效、灵活、可扩展等特点,因此被越来越多的人所关注和使用。本篇文章将对 MongoDB 在数据存储和查询方面的使用经验进行总结,为大家提供参考。
一、MongoDB 介绍
MongoDB 是一个开源的、面向文档的 NoSQL 数据库,它是基于分布式文件存储的架构设计,旨在提供可扩展性和高性能。
MongoDB 的数据模型是面向文档(Document-Oriented)的,意味着它可以存储任意形式、结构不同的文档。MongoDB 中的文档类似于关系数据库中的行(row),但不同之处在于,MongoDB 中的文档可以包含多层嵌套的结构,这使得 MongoDB 十分灵活。
MongoDB 支持多种语言的 API,包括 Java、C++、Python、Javacript 等,因此它很适合作为 Web 应用程序的后台数据库。
二、 MongoDB 的数据存储
1. 基本概念
集合(collection)
一个集合是 MongoDB 中的一组文档,类似于关系数据库中的表。集合包含许多文档,这些文档具有类似的或不同的结构。
文档(document)
MongoDB 的存储单位是文档,一个文档类似于关系型数据库中的一行(row),但与行不同的是:MongoDB 中的文档可以包含多层嵌套的结构。MongoDB 在使用的过程中,所涉到的所有数据都是以文档的形式存储。
每一个文档都有一个 _id 属性,它是唯一的识别符并且在集合中是必须的。如果之前没有设置 _id 属性,MongoDB 会自己创建一个。如果要指定自己的 _id 值,则其值必须是唯一的。
字段(field)
集合中每一个文档存储的数据又是以键值对的形式出现的,这些键值对就是文档中的各个字段。
2. 数据插入
插入文档的方法是 insertOne 或 insertMany,示例代码如下:
// 插入单个文档 db.collection('users').insertOne({name: 'Tom', age: 20}) // 插入多个文档 db.collection('users').insertMany([{name: 'Tom', age: 20}, {name: 'Jack', age: 21}])
3. 数据查询
查询数据的方法是 find,示例代码如下:
// 查询所有文档 db.collection('users').find({}) // 按条件查询文档 db.collection('users').find({age: {$gt: 20}}) // 查询第一条文档 db.collection('users').findOne({})
在进行查询时,可以使用类似 SQL 的条件查询,如 $eq、$gt、$gte、$lt、$lte、$ne 等操作符。
三、 MongoDB 的数据查询
1. 单值查询
db.collection.find({age: 23})
2. 范围查询
db.collection.find({age: {$gt: 23, $lte: 30}})
3. 多值查询
db.collection.find({age: {$in: [23, 26, 30]}})
4. 集合查询
db.collection.find({"contact.phone": "555-555-1212"})
5. 逻辑查询
db.collection.find({"$or": [{age: 23}, {age: 26}]}) db.collection.find({"$and": [{age: 23}, {"contact.phone": "555-555-1212"}]})
6. 应用场景
MongoDB 自带的 MapReduce 以及聚合框架,可以帮助处理大数据集合的数据分组,计算平均值、标准差等。
7. 索引
为了提高数据查询的速度,MongoDB 支持创建索引。常见的索引如下:
- 单键索引
- 复合索引
- 唯一索引
- 全文索引
索引的创建方法如下:
db.collection.createIndex({fieldName: 1})
四、总结
本文主要介绍了 MongoDB 的数据存储和查询,对于初学 MongoDB 的同学来说,这些基本概念和方法需要掌握。同时,合理地建立索引、合理地选择查询方法,也能提升 MongoDB 的查询效率。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645b60db968c7c53b0db8751