首页 > 解决方案 > 如何读取多个 CosmosDB 文档

问题描述

我一直试图弄清楚如何让我的列表从特定查询中读取。如果我注释掉其中一个 app.get 它从一个 DocumentDB 中读取,反之亦然。如何让它同时读取我的两个查询或指定一个列表从一个查询中读取,而另一个列表从第二个查询中读取?我尝试了第二个 querySpec,但不确定这是否可行。

谢谢

我能够从我之前的问题中获得帮助。 连接到多个 CosmosDB 文档

原教程: https ://docs.microsoft.com/en-us/azure/cosmos-db/sql-api-nodejs-application#_Toc395783181

tasklist.js 中的代码

const TaskDao = require("../models/taskDao");

 class TaskList {
   /**
    * Handles the various APIs for displaying and managing tasks
    * @param {TaskDao} taskDao
    */
   constructor(taskDao,taskDao2) {
     this.taskDao = taskDao;
     this.taskDao2 = taskDao2;
   }

   async showList1(req, res) {
    const querySpec = {
      query: "SELECT * FROM root r WHERE r.List1=@List1",
      parameters: [
        {
          name: "@List1",
          value: "yes"
        }
      ]

    };

     const items = await this.taskDao2.find(querySpec);
     res.render("index", {
       title: "Form",
       tasks: items
     });

   }


   async showList2(req, res) {
    const querySpec2 = {
      query: "SELECT * FROM root r WHERE r.List2=@List2",
       parameters: [
         {
           name: "@List2",
           value: true
        }
      ]
    };

     const items = await this.taskDao.find(querySpec2);
     res.render("index", {
       title: "Form",
       tasks: items
     });

   }

   async addTask(req, res) {
     const item = req.body;

     await this.taskDao.addItem(item);
     res.redirect("/");
   }
 }

 module.exports = TaskList;

app.js 中的代码

app.get('/', (req, res, next) => taskList.showList1(req, res).catch(next))
app.get('/', (req, res, next) => taskList.showList2(req, res).catch(next))

我想让这些列表读取不同的值。

在此处输入图像描述

标签: azure-cosmosdb

解决方案


如果您只想将数据从两个不同的容器加载到 HTML 选择器,您应该使用res.send来发送数据而不是res.render.

请尝试以下步骤: 1.app.js 在此处添加两个路线代码:

 app.get('/list1', (req, res, next) => taskList.showTasks1(req, res).catch(next))
 app.get('/list2', (req, res, next) => taskList.showTasks2(req, res).catch(next)) 

在此处输入图像描述

2.转到routes/tasklist.js,添加showTasks1showTasks2(此代码基于我之前的答案taskDao2,此处需要。):

   async showTasks1(req, res) {
    const items = await this.taskDao.find("SELECT * FROM root r ");
    res.send(items);
  }
  async showTasks2(req, res) {
    const items = await this.taskDao2.find("SELECT * FROM root r ");
    res.send(items);
  }

在此处输入图像描述

运行这个项目,你可以通过 URL 从你的两个容器中获取数据:

http://localhost:3000/list1http://localhost:3000/list2

在此处输入图像描述

最后,只需参考我的第一个答案即可将数据加载到选择器。

希望能帮助到你。如果您有任何进一步的疑虑,请随时告诉我。


推荐阅读