azure-cosmosdb - 如何读取多个 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))
我想让这些列表读取不同的值。
解决方案
如果您只想将数据从两个不同的容器加载到 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
,添加showTasks1
和showTasks2
(此代码基于我之前的答案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/list1
和http://localhost:3000/list2
最后,只需参考我的第一个答案即可将数据加载到选择器。
希望能帮助到你。如果您有任何进一步的疑虑,请随时告诉我。
推荐阅读
- c++ - 将用户输入传递给类函数的参数的更快方法是什么?
- .htaccess - .htaccess 将地址重定向到没有域后缀的地址
- django - 为什么 Django 的 AuthenticationForm 在错误消息中返回奇怪的 str
- github - Github Copilot 停止工作,解析 extraData 时出错:服务不可用
- c# - 如何在 WPF MVVM 页面中导航
- html - bootstrap 5的导航栏项目alingment
- ruby-on-rails - 如何在 ActiveAdmin 中获取集合的路径
- nginx - 仅当域名具有关键字时,如何从 nginx 提供一组文件
- c++ - 将自定义结构转换为另一个模板类型
- python - 比较第一列的值后乘以不同大小的数据帧