Getting Started

MongoDB Atlas 是一个定制, 运行, 监控以及维护 MongoDB 的云端服务. 它是一个快速, 简单并且免费的使用 MongoDB 的途径. 如果想在本地安装运行 MongoDB, 参见安装 MongoDB.

接下来的教程使用 MongoDB Node.js 驱动 来连接一个免费的 Atlas 集群, 然后执行插入和查询操作.

1.创建一个 Atlas 账户.

想要使用 MongoDB Atlas, 请先创建你的账户并登陆到 Atlas.

2.创建一个 Atlas Group.

为你的 group 取个名字.

你可以通过 gourp 来管理相关联的 MongoDB 实例. 要创建另外的 Atlas group, 请点击左上角的用户名然后选择 My Groups. 点击 Add Group 按钮即可.

3.创建一个集群.

在 Atlas 中部署一个 MongoDB 实例或者 “clusters”, 可以是一个 replica set 或者 sharded cluster.

要创建集群, 进入 Clusters 界面并点击 Add New Cluster 或者 Build a New Cluster 按钮.

  1. 输入 Cluster Name.

  2. 找到 M0 级免费教学实例, 并点击对应的 Select 按钮.

  3. 输入 Username (用户名) 和 Password (密码).


    These fields appear only if no MongoDB user exists for your Atlas group. If you created users in the group beforehand these fields will not appear.

  4. 点击 Confirm & Deploy (确认部署).

4.安全设置

Atlas 只允许 group 入口白名单中的客户端连接集群. 在白名单中添加一个入口:

  1. 在 Clusters 页面点击 Security 选项.
  2. 点击 IP Whitelist, 然后添加 IP Address. 你可以在 Whitelist Entry 中手动输入 IP 地址, 也可以点击 Add Current IP Address 按钮.
  3. 点击 Confirm 然后等待 Atlas 更新防火墙.

5.下载驱动客户端.

推荐通过 npm init 初始化一个项目的配置文件, 然后用 npm 安装 MongoDB Node.js 驱动:

npm install mongodb --save

需要更多信息, 请查看 Node.js 驱动快速开始文档.

6.获取 URI 连接串.

通过 MongoDB Atlas Clusters 页面:

  1. 点击 Connect 按钮来查看 URI 连接字符串.
  2. 复制连接字符串.
  3. 将连接串中的 <PASSWORD> 替换成之前创建时设置的密码, 并且替换 <DATABASE> 为你要连接/简历的数据库名. 下文中使用 test 数据库.
  4. 复制修改好的 URI.

7.连接到集群

使用上一步获取的 URI 字符串, 连接 Atlas 集群:

var MongoClient = require('mongodb').MongoClient;

var uri = "mongodb://user123:[email protected]:27017,gettingstarted-shard-00-01-hyjsm.mongodb.net:27017,gettingstarted-shard-00-02-hyjsm.mongodb.net:27017/test?ssl=true&replicaSet=GettingStarted-shard-0&authSource=admin";
MongoClient.connect(uri, function(err, db) {
  // Paste the following examples here

  db.close();
});

文档 & 集合

MongoDB 在 collections 中使用 BSON 结构(二进制格式的 JSON) 来存储数据. MongoDB 中一个数据库对应多个集合, 一个集合对应多个文档.

插入文档

Collection.insertMany() 可以用来插入 多个 文档. 传递一个包含文档的给这个方法.

如下代码插入了新的文档到 inventory 集合中:

db.collection('inventory').insertMany([
   // MongoDB adds the _id field with an ObjectId if _id is not present
   { item: "journal", qty: 25, status: "A",
       size: { h: 14, w: 21, uom: "cm" }, tags: [ "blank", "red" ] },
   { item: "notebook", qty: 50, status: "A",
       size: { h: 8.5, w: 11, uom: "in" }, tags: [ "red", "blank" ] },
   { item: "paper", qty: 100, status: "D",
       size: { h: 8.5, w: 11, uom: "in" }, tags: [ "red", "blank", "plain" ] },
   { item: "planner", qty: 75, status: "D",
       size: { h: 22.85, w: 30, uom: "cm" }, tags: [ "blank", "red" ] },
   { item: "postcard", qty: 45, status: "A",
       size: { h: 10, w: 15.25, uom: "cm" }, tags: [ "blue" ] }
])
.then(function(result) {
  // process result
})

insertMany() 返回一个包含被插入文档的 _id 的数据. 可以查看这里的例子.

使用 Collection.insertOne() 来插入单个文档.

想要更多的文档和例子, 可以参见增删改查章节的插入.

Query

查询所有

要查询 (select) 所有集合中的文档, 给 Collection.find() 方法传一个空的文档作为查询过滤:

var cursor = db.collection('inventory').find({});

要查询匹配指定条件的文档, 可以使用 find() 方法, 并传递 <字段>:<值> 格式的过滤 条件. 下例为查询 inventory 集合中所有的 status"D" 的文档:

var cursor = db.collection('inventory').find({ status: "D" });

匹配嵌套内容

相等的匹配在匹配整个嵌套结构的文档时需要 确切 地指定 <value>, 包括字段的顺序. 举个栗子, 下列语句可以查询所有 size 字段等于 {h:14,w:21,uom:"cm"} 的文档:

var cursor = db.collection('inventory').find({ 
  size: { h: 14, w: 21, uom: "cm" }
});

匹配嵌套文档中的一个字段

查询所有嵌套在 size 字段下的 uom 字段等于 "in" 的文档:

var cursor = db.collection('inventory').find({ 
  "size.uom": "in"
});

匹配数组中的一个元素

查询 tags 是一个数组并且其中包含 "red" 的所有文档:

var cursor = db.collection('inventory').find({ 
  tags: "red"
});

精确匹配一个数组

查询 tags 字段的值为一个包含 "red""blank" 并且顺序确定的数组的所有文档:

var cursor = db.collection('inventory').find({ 
  tags: [ "red", "blank" ]
});

更多信息以及查询例子, 参见增删改查章节的查询.

关于更新和删除文档, 参见Update DocumentsDelete Documents.

下一步

当你阅读完 Getting Started 概览之后, 你可以通过下列课程和主题获得更多帮助:

想学习更多关于 MongoDB 查询语句和其他 MongoDB 基础知识, 可以注册 M001: MongoDB Basics 课程.

Introduction Developers Administrators Reference
MongoDB 简介
安装指南
数据库 & 集合
文档
增删改查
聚合
SQL 转 MongoDB
索引
Production Notes
复制集
Sharded 集群
MongoDB 安全
Shell 方法
查询操作符
Reference
术语表

results matching ""

    No results matching ""