使用 Visual Studio Code 的 DocumentDB 扩展连接到 Azure DocumentDB

Visual Studio Code 是适用于 Linux、macOS 和 Windows 的通用代码编辑器,可支持许多扩展。 本快速入门介绍如何使用 Visual Studio Code 中的 DocumentDB 扩展连接到 Azure DocumentDB 群集。 文中介绍了如何执行核心数据库操作,包括查询、插入、更新和删除数据。

先决条件

  • Azure 订阅服务

    • 如果没有 Azure 订阅,请创建 试用版
  • 现有的 Azure DocumentDB 群集

安装扩展

首先在 Visual Studio Code 中安装 DocumentDB 扩展。 此扩展用于连接到 Azure DocumentDB 和本机 DocumentDB 群集。

  1. 打开 Visual Studio Code

  2. 通过在活动栏中选择相应的图标或使用键盘快捷方式导航到Ctrl+Shift+X”视图。

  3. 搜索术语 DocumentDB 并找到 DocumentDB for VS Code 扩展。

  4. 选择扩展的 “安装 ”按钮。

    小窍门

    还可以在扩展的详细信息视图中选择 “安装 ”按钮。

  5. 等待安装完成。 遇到提示时,请重新加载 Visual Studio Code。

连接到集群

现在,使用服务发现连接到现有群集。 Azure 服务发现可以查找在 Azure 虚拟机或 Azure DocumentDB 上运行的 DocumentDB 实例。 在此步骤中,使用服务发现查找现有的 Azure DocumentDB 群集。

  1. 在活动栏中选择相应的图标,导航到 DocumentDB 扩展。

  2. “DocumentDB 连接 ”窗格中,选择“ + 新建连接...”

  3. 在第一个对话框中,选择 “服务发现”。

  4. 在下一个对话框中,选择 “Azure DocumentDB - Azure 服务发现”。

  5. 选择 Azure 订阅。

    重要

    如果未登录到任何 Azure 订阅,此时系统会提示管理与 Visual Studio Code 关联的订阅。 必须至少有一个关联的订阅才能继续执行后续步骤。

  6. 选择要连接到群集的现有 Azure DocumentDB 群集。

    小窍门

    在许多企业环境中,由于 VPN 或其他企业网络的设置,开发人员计算机 IP 地址会隐藏。 在这些情况下,可以通过将 IP 地址范围添加 0.0.0.0 - 255.255.255.255 为防火墙规则来暂时允许访问所有 IP 地址。 将此防火墙规则暂时用作连接测试和开发的一部分。 有关详细信息,请参阅 配置防火墙

  7. 观察现有群集的 DocumentDB 连接 窗格中的新节点。

管理群集资源

首先,使用扩展来管理群集中的数据库和集合。

  1. “DocumentDB 连接 ”窗格中,展开群集的节点。

  2. 选择 “+ 创建数据库...”

  3. 输入新数据库的唯一名称。 例如,可以使用名称 商店

  4. 展开数据库节点,然后选择“ + 创建集合...”

  5. 输入新集合的唯一名称。 例如,可以使用名称 产品

  6. 打开数据库节点的上下文菜单。 然后,再次选择“ 创建集合...”

  7. 为第二个新集合输入另一个唯一的名称。 例如,使用名称 员工

  8. 打开其中一个集合节点的上下文菜单。 然后选择“ 删除集合...”

    小窍门

    或者,使用数据库节点的上下文菜单删除相应的数据库。

迁移和修改文档

接下来,使用内置工具编辑现有文档、导入多个文档或将文档导出为 JSON 文件。

  1. 在 Visual Studio Code 中,创建具有唯一名称的新 JSON 文件。 例如,使用名称 inventory.json

  2. 将以下六个产品作为数组输入 JSON 文件中。

    Name 类别 数量 价格 销售
    00000000-0000-0000-0000-000000004001 Raiot Jacket gear-paddle-safety-gear 909 42.00 ❌ 否
    00000000-0000-0000-0000-000000004007 Xenmon Mountain Bike gear-cycle-mountain-bikes 12 1399.00 ✅ 是
    00000000-0000-0000-0000-000000004018 Windry Mittens apparel-accessories-gloves-and-mittens 121 35 ❌ 否
    00000000-0000-0000-0000-000000004025 Metix Sleeping Bag gear-camp-sleeping-bags 118 150.00 ✅ 是
    00000000-0000-0000-0000-000000004058 Complete Camp Cookware Set gear-camp-cookware 170 88.00 ✅ 是
    00000000-0000-0000-0000-000000004318* Niborio Tent gear-camp-tents 140 420 ✅ 是
    [
      {
        "_id": "00000000-0000-0000-0000-000000004001",
        "name": "Raiot Jacket",
        "category": "gear-paddle-safety-gear",
        "quantity": 909,
        "price": 42.00,
        "sale": false
      },
      {
        "_id": "00000000-0000-0000-0000-000000004007",
        "name": "Xenmon Mountain Bike",
        "category": "gear-cycle-mountain-bikes",
        "quantity": 12,
        "price": 1399.00,
        "sale": true
      },
      {
        "_id": "00000000-0000-0000-0000-000000004018",
        "name": "Windry Mittens",
        "category": "apparel-accessories-gloves-and-mittens",
        "quantity": 121,
        "price": 35.00,
        "sale": false
      },
      {
        "_id": "00000000-0000-0000-0000-000000004025",
        "name": "Metix Sleeping Bag",
        "category": "gear-camp-sleeping-bags",
        "quantity": 118,
        "price": 150.00,
        "sale": true
      },
      {
        "_id": "00000000-0000-0000-0000-000000004058",
        "name": "Complete Camp Cookware Set",
        "category": "gear-camp-cookware",
        "quantity": 170,
        "price": 88.00,
        "sale": true
      },
      {
        "_id": "00000000-0000-0000-0000-000000004318",
        "name": "Niborio Tent",
        "category": "gear-camp-tents",
        "quantity": 140,
        "price": 420.00,
        "sale": true
      }
    ]
    
  3. 保存 修改的文件。

  4. 打开群集中其中一个集合的上下文菜单。 然后选择“ 将文档导入集合...”

  5. 等待导入过程完成。

  6. 展开集合节点并选择“ 文档”。

  7. 观察集合中新导入的文档。

  8. 选择其中一个文档。 然后,选择“文档”视图菜单中的“编辑”图标。

  9. 更新 price 文档的属性值。 例如,将产品的价格 Windry Mittens35.00 中更新为 45.00

    {
      "_id": "00000000-0000-0000-0000-000000004018",
      "name": "Windry Mittens",
      "category": "apparel-accessories-gloves-and-mittens",
      "quantity": 121,
      "price": 45.00,
      "sale": false
    }
    
  10. 选择 “保存” 以保留对文档所做的更改。

  11. 再次打开同一集合的上下文菜单。 现在,选择 “从集合导出文档...”

  12. 为新导出的 JSON 文件指定唯一名称。 例如,将文件命名 为inventory-modified.json

  13. 在 Visual Studio Code 编辑器中打开新的 JSON 文件。 观察 JSON 数组中表示的文档。

    [
      {
        "_id": "00000000-0000-0000-0000-000000004001",
        "name": "Raiot Jacket",
        "category": "gear-paddle-safety-gear",
        "quantity": 909,
        "price": 42,
        "sale": false
      },
      {
        "_id": "00000000-0000-0000-0000-000000004007",
        "name": "Xenmon Mountain Bike",
        "category": "gear-cycle-mountain-bikes",
        "quantity": 12,
        "price": 1399,
        "sale": true
      },
      {
        "_id": "00000000-0000-0000-0000-000000004025",
        "name": "Metix Sleeping Bag",
        "category": "gear-camp-sleeping-bags",
        "quantity": 118,
        "price": 150,
        "sale": true
      },
      {
        "_id": "00000000-0000-0000-0000-000000004058",
        "name": "Complete Camp Cookware Set",
        "category": "gear-camp-cookware",
        "quantity": 170,
        "price": 88,
        "sale": true
      },
      {
        "_id": "00000000-0000-0000-0000-000000004318",
        "name": "Niborio Tent",
        "category": "gear-camp-tents",
        "quantity": 140,
        "price": 420,
        "sale": true
      },
      {
        "_id": "00000000-0000-0000-0000-000000004018",
        "name": "Windry Mittens",
        "category": "apparel-accessories-gloves-and-mittens",
        "quantity": 121,
        "price": 45,
        "sale": false
      }
    ]
    

    注释

    导入的文档和导出的文档之间的数值精度可能会有所不同。 这种变化是因为 JavaScript 对象表示法(JSON)和二进制 JSON(BSON)对数字使用不同的数据类型。

查询和可视化数据

find使用筛选器使用 MongoDB 查询语言(MQL)对数据执行查询,并将结果输出为 JSON。 然后,将数据置于上下文中,使用扩展以表格信息或树视图的形式呈现。

  1. “文档” 视图中,将查询从默认值 { } 更新为以下查询:

    {
      "sale": true,
      "price": {
        "$gt": 100
      }
    }
    
  2. 选择 “查找查询”。

  3. 观察结果中与查询匹配的三个文档。

Name 类别 数量 价格 销售
00000000-0000-0000-0000-000000004007 Xenmon Mountain Bike gear-cycle-mountain-bikes 12 1399.00 ✅ 是
00000000-0000-0000-0000-000000004025 Metix Sleeping Bag gear-camp-sleeping-bags 118 150.00 ✅ 是
00000000-0000-0000-0000-000000004318* Niborio Tent gear-camp-tents 140 420 ✅ 是
  1. 在结果窗格中,打开视图的下拉列表,然后选择 JSON 视图 以将结果观察为单独的 JSON 文档。

    {
      "_id": "00000000-0000-0000-0000-000000004007",
      "name": "Xenmon Mountain Bike",
      "category": "gear-cycle-mountain-bikes",
      "quantity": 12,
      "price": 1399,
      "sale": true
    }
    
    {
      "_id": "00000000-0000-0000-0000-000000004025",
      "name": "Metix Sleeping Bag",
      "category": "gear-camp-sleeping-bags",
      "quantity": 118,
      "price": 150,
      "sale": true
    }
    
    {
      "_id": "00000000-0000-0000-0000-000000004318",
      "name": "Niborio Tent",
      "category": "gear-camp-tents",
      "quantity": 140,
      "price": 420,
      "sale": true
    }
    
  2. 最后,选择 “树视图 ”以以分层格式查看结果。

    • 00000000-0000-0000-0000-000000004007 -公文

      • gear-cycle-mountain-bikes -字符串

      • Xenmon Mountain Bike -字符串

      • 1399 -双

      • 12 -双

      • true -布尔

    • 00000000-0000-0000-0000-000000004025 -公文

      • gear-camp-sleeping-bags -字符串

      • Metix Sleeping Bag -字符串

      • 150 -双

      • 118 -双

      • true -布尔

    • 00000000-0000-0000-0000-000000004318 -公文

      • gear-camp-tents -字符串

      • Niborio Tent -字符串

      • 420 -双

      • 140 -双

      • true -布尔

启动 MongoDB Shell

现在,使用直接连接到群集的扩展启动 MongoDB Shell(mongosh)。 使用通常与 shell 一起使用的相同语法和命令。

  1. 打开群集的上下文菜单。 接下来,选择 “启动 Shell”。

  2. shell 在 Visual Studio Code 的默认终端中启动。

  3. 成功进行身份验证后,请观察显示的警告。

    ------
       Warning: Non-Genuine MongoDB Detected
       This server or service appears to be an emulation of MongoDB rather than an official MongoDB product.
    ------
    

    小窍门

    可以放心地忽略此警告。 之所以生成此警告,是因为连接字符串包含 cosmos.azure。 Azure DocumentDB 是 Azure 平台的 PaaS 原生产品。

执行测试查询

通过执行一系列测试命令和查询来验证是否已成功连接到群集。

  1. 通过运行 connectionStatus 命令检查连接状态。

    db.runCommand({connectionStatus: 1})
    
    {
      ...
      ok: 1
    }
    
  2. 列出群集中的数据库。

    show dbs
    
  3. 切换到特定数据库。 将 <database-name> 占位符替换为群集中任何数据库的名称。

    use <database-name>
    

    小窍门

    例如,如果数据库名称为 inventory,则命令为 use inventory

  4. 列出数据库中的集合。

    show collections
    
  5. 查找特定集合中的前五项。 将 <collection-name> 占位符替换为群集中任何集合的名称。

    db.<collection-name>.find().limit(5)
    

    小窍门

    例如,如果集合名称为 equipment,则命令为 db.equipment.find().limit(5)

使用 MongoDB 剪贴簿

最后,打开一个剪贴簿,以与 shell 类似的方式直接针对集合运行 MQL 命令。

  1. 打开集合的上下文菜单,然后选择 DocumentDB 剪贴簿 > “新建 DocumentDB 剪贴簿”。

  2. 输入以下 MongoDB 查询语言 (MQL) 命令以查找正在销售的产品,价格介于 100 到 1000 之间,数量大于 50。 结果仅包括名称、价格和数量字段,按降序按价格排序。

    db.products.aggregate([
      {
        $match: {
          sale: true,
          price: { $gte: 100, $lte: 1000 },
          quantity: { $gt: 50 }
        }
      },
      {
        $project: {
          _id: 0,
          name: 1,
          price: 1,
          quantity: 1
        }
      },
      {
        $sort: { price: -1 }
      }
    ])
    
  3. 选择“ 全部运行 ”,针对当前群集运行剪贴簿的全部内容。

  4. 观察命令的输出。

    [
      {
        "name": "Niborio Tent",
        "quantity": 140,
        "price": 420
      },
      {
        "name": "Metix Sleeping Bag",
        "quantity": 118,
        "price": 150
      }
    ]
    
  5. 保存剪贴簿,文件名须唯一,且使用*.vscode-documentdb-scrapbook扩展名。