JDT*_*JDT 5 arrays for-loop azure node.js azure-cosmosdb
我已经查看了有关此问题的一些答案/问题,但尚未找到解决方案。
我有一个包含文档(简化)的集合,如下所示:
{
"id": 123
"stuff": "abc"
"array":[
{
"id2":456
"properties": [
{
"id3": 789
"important": true
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想检查for我的集合中的每个文档,for每个array对象array,for每个对象properties,如果有的important: true话。然后返回:
"id": 123
"id2": 456
"id3": 789
Run Code Online (Sandbox Code Playgroud)
我尝试过使用:
client.queryDocuments(self.collection._self, querySpec).toArray(function(err, results) {
if (err) {
callback(err);
} else {
callback(null, results[0]);
}
});
Run Code Online (Sandbox Code Playgroud)
但问题是数组有最大字符数限制。如果我的收藏有数百万份文档,这可能会超出。(Javascript增加最大数组大小)
或者,我误解了上面的问题吗?它是在谈论数组中的对象数量(其中每个对象可以具有无限的对象字符长度吗?)
因此,我正在寻找一个for loop类似的解决方案,其中返回每个文档,我进行分析,然后移动到下一个/并行执行它们。
任何见解将不胜感激。
但问题是数组有最大字符数限制。如果我的收藏有数百万份文档,这可能会超出。(Javascript 增加最大数组大小)
根据我的研究,js 中最长的数组可能有 232-1 ==4,294,967,295十亿4.29个元素。不过,它完全足以满足您数百万数据量的需求。另外,你肯定不能直接查询这么海量的数据,那是不可能的。
无论是吞吐量限制(RU 设置)还是查询效率因素,您都应该考虑批量处理大量数据。
因此,我正在寻找一个 for 循环式的解决方案,其中返回每个文档,我进行分析,然后移动到下一个/并行执行它们。
也许您可以使用v2 js sdk for cosmos db sql api。请参考示例代码:
const cosmos = require('@azure/cosmos');
const CosmosClient = cosmos.CosmosClient;
const endpoint = "https://***.documents.azure.com:443/"; // Add your endpoint
const masterKey = "***"; // Add the masterkey of the endpoint
const client = new CosmosClient({ endpoint, auth: { masterKey } });
const databaseId = "db";
const containerId = "coll";
async function run() {
const { container, database } = await init();
const querySpec = {
query: "SELECT r.id,r._ts FROM root r"
};
const queryOptions = {
maxItemCount : -1
}
const queryIterator = await container.items.query(querySpec,queryOptions);
while (queryIterator.hasMoreResults()) {
const { result: results, headers } = await queryIterator.executeNext();
console.log(results)
console.log(headers)
//do what you want to do
if (results === undefined) {
// no more results
break;
}
}
}
async function init() {
const { database } = await client.databases.createIfNotExists({ id: databaseId });
const { container } = await database.containers.createIfNotExists({ id: containerId });
return { database, container };
}
run().catch(err => {
console.error(err);
});
Run Code Online (Sandbox Code Playgroud)
关于延续令牌的更多细节,请参考我之前的案例。如有任何疑问,请告诉我。
| 归档时间: |
|
| 查看次数: |
4162 次 |
| 最近记录: |