MongoDB数据模型详解

MongoDB是一种基于文档的非关系型数据库,数据模型也有所不同于传统的关系型数据库。本文将详细介绍MongoDB的数据模型,并通过示例代码进行演示。

文档

MongoDB中的最基本的数据单元是文档(Document),文档是一个以键值对形式组成的数据结构,类似于JSON对象。MongoDB中的文档可以包含嵌套的文档或数组。

下面是一个简单的文档示例:

{
  "name": "John",
  "age": 28,
  "address": {
    "street": "123 Main St.",
    "city": "San Francisco",
    "state": "CA"
  },
  "hobbies": ["fishing", "reading"]
}

集合

MongoDB中的文档被组织在集合(Collection)中,一个集合可以包含多个文档。不同于关系型数据库中的表(Table),集合是动态的,不需要预定义schema。

以下是创建一个集合的示例:

db.createCollection("users");

索引

MongoDB支持创建索引(Index),通过索引可以快速地查找数据。需要注意的是,创建过多的索引可能会影响数据库的性能。

以下是创建一个索引的示例:

db.users.createIndex( { name: 1 } );

查询

MongoDB支持多种查询方式,其中最基本的方式是find()方法。

以下是简单的查询示例:

db.users.find({ name: "John" });

查询结果将会是一个包含所有匹配文档的游标(Cursor)对象。可以通过迭代游标对象获取所有匹配文档。

MongoDB还支持复杂的查询,如聚合查询(aggregate())、范围查询($gt,$lt)和正则表达式查询(regex())等等。

以下是聚合查询示例:

db.orders.aggregate([
  { $match: { status: "completed" } },
  { $group: { _id: "$customer", total: { $sum: "$price" } } }
]);

更新

MongoDB支持在集合中更新文档。更新的方式包括替换整个文档或只更新文档的特定字段。

以下是更新文档的示例:

db.users.update({ name: "John" }, { $set: { age: 29 } })

上面的代码将会把所有名为"John"的文档的年龄增加1岁。

删除

MongoDB支持在集合中删除文档。

以下是删除文档的示例:

db.users.remove({ name: "John" })

上面的代码将会删除所有名为"John"的文档。

访问控制

MongoDB支持基于角色的访问控制,可以限定用户在集合和数据库级别的操作权限。具有足够权限的用户可以通过创建和授权角色来管理其他用户的访问权限。

以下是创建用户和角色的示例:

db.createUser({
  user: "admin",
  pwd: "password",
  roles: [
    { role: "readWrite", db: "some_database" }
  ]
});

以上就是MongoDB数据模型的完整攻略,希望能对您有所帮助。

本文链接:https://my.lmcjl.com/post/20481.html

展开阅读全文

4 评论

留下您的评论.