1、MongoDB 的适用场景
- 大数据存储:适合存储大量结构化和半结构化的数据。
- 实时分析:支持实时数据处理和分析。
- 内容管理系统:存储动态内容,如博客、新闻网站等。
- 物联网(IoT) :存储设备数据和传感器数据。
- 移动应用后端:存储用户数据和应用状态。
2、MongoDB 与其他数据库的对比
-
与关系型数据库(如 MySQL)对比:
- 结构灵活性:MongoDB 的文档结构更灵活,适合动态数据。
- 性能:MongoDB 在处理大量数据时通常具有更高的性能。
- 扩展性:MongoDB 更适合水平扩展,而关系型数据库更适合垂直扩展。
-
与其他 NoSQL 数据库(如 Cassandra)对比:
- 数据模型:MongoDB 是文档型数据库,而 Cassandra 是列族数据库。
- 查询语言:MongoDB 的查询语言更丰富,适合复杂的查询操作。
- 适用场景:MongoDB 更适合需要灵活数据模型的场景,而 Cassandra 更适合高吞吐量的写入场景。
3. MongoDB 的数据组织结构
MongoDB 的数据组织结构包括以下几个层次:
- 数据库(Database) :一个 MongoDB 实例可以包含多个数据库,每个数据库是一个独立的存储空间。
- 集合(Collection) :数据库中存储文档的容器,类似于关系型数据库中的表。集合中的文档可以有不同的结构。
- 文档(Document) :集合中的数据记录,以 BSON(二进制 JSON)格式存储。文档是 MongoDB 的基本数据单位。
4、基本查询
4.1 插入数据
MongoDB 使用 insertOne() 和 insertMany() 方法来插入数据。
-
插入单条文档:
JavaScript
复制
db.collection_name.insertOne({"key1": "value1", "key2": "value2"}) -
插入多条文档:
JavaScript
复制
db.collection_name.insertMany([ {"key1": "value1", "key2": "value2"}, {"key1": "value3", "key2": "value4"}])
4.2 查询数据
-
查询所有文档:
JavaScript
复制
db.collection_name.find() -
查询符合条件的所有文档:
JavaScript
复制
db.collection_name.find({"key": "value"}) -
查询符合条件的第一个文档:
JavaScript
复制
db.collection_name.findOne({"key": "value"}) -
查询前 N 条文档:
JavaScript
复制
db.collection_name.find().limit(N)例如,查询前 5 条文档:
JavaScript
复制
db.collection_name.find().limit(5) -
按字段升序/降序排序查询结果:
JavaScript
复制
db.collection_name.find().sort({"key": 1}) // 升序 db.collection_name.find().sort({"key": -1}) // 降序 -
分页查询:
JavaScript
复制
db.collection_name.find().skip(N).limit(M)例如,查询第 6-10 条文档:
JavaScript
复制
db.collection_name.find().skip(5).limit(5)
4.3 更新数据
-
更新符合条件的第一个文档:
JavaScript
复制
db.collection_name.updateOne({"key": "value"}, {"$set": {"key2": "new_value"}}) -
更新符合条件的所有文档:
JavaScript
复制
db.collection_name.updateMany({"key": "value"}, {"$set": {"key2": "new_value"}})
4.4 删除数据
-
删除符合条件的第一个文档:
JavaScript
复制
db.collection_name.deleteOne({"key": "value"}) -
删除符合条件的所有文档:
JavaScript
复制
db.collection_name.deleteMany({"key": "value"})
4.5 其他常用查询操作符
-
范围查询:
-
$gt:大于JavaScript
复制
db.collection.find({"field":{$gt:value}}) -
$lt:小于JavaScript
复制
db.collection.find({"field":{$lt:value}}) -
$gte:大于或等于JavaScript
复制
db.collection.find({"field":{$gte:value}}) -
$lte:小于或等于JavaScript
复制
db.collection.find({"field":{$lte:value}})
-
-
不等于:
JavaScript
复制
db.collection.find({"field":{$ne:value}}) -
$in与$nin:-
$in:匹配字段值在给定数组中的文档JavaScript
复制
db.collection.find({"field":{$in:[value1, value2]}}) -
$nin:匹配字段值不在给定数组中的文档JavaScript
复制
db.collection.find({"field":{$nin:[value1, value2]}})
-
-
取模运算:
JavaScript
复制
db.collection.find({"field":{$mod:[divisor, remainder]}})例如,查找字段
field的值除以 10 后余数为 1 的文档:JavaScript
复制
db.collection.find({"field":{$mod:[10, 1]}}) -
$all:要求字段值必须匹配数组中的所有元素JavaScript
复制
db.collection.find({"field":{$all:[value1, value2]}}) -
$size:匹配数组字段中元素的数量JavaScript
复制
db.collection.find({"field":{$size:N}})