【问题标题】:How to get & set Cosmos Db continuation token in javascript如何在 JavaScript 中获取和设置 Cosmos Db 延续令牌
【发布时间】:2019-02-08 12:08:14
【问题描述】:

使用 CosmosDb 的 V2 Javascript SDK,我从 db 中获得了 TOP 10 项:

var query = "SELECT TOP 10 * FROM People"

const querySpec = {
    query: query
};

var result = await container.items.query(querySpec).toArray();

如何获取接下来 10 个结果的延续令牌以及如何在下一个查询中设置它?

【问题讨论】:

    标签: javascript azure-cosmosdb


    【解决方案1】:

    埃姆雷。请参考我的工作示例代码:

    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)
    
            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);
    });
    

    您可以在console.log(headers) 中找到延续令牌。

    更多详情,请参考source code


    更新答案:

    请参考我的示例函数:

        async function queryItems1(continuationToken) {
        const { container, database } = await init();
        const querySpec = {
            query: "SELECT r.id,r._ts FROM root r"
        };
        const queryOptions  = {
            maxItemCount : 2,
            continuation : continuationToken
        };
    
        const queryIterator = await container.items.query(querySpec,queryOptions);
        if (queryIterator.hasMoreResults()) {
            const { result: results, headers } = await queryIterator.executeNext();
            console.log(results)
            const token = headers['x-ms-continuation'];
            if(token){
                await queryItems1(token);
            }       
        }   
    }
    

    【讨论】:

    • 谢谢。我正在查看示例,但您在此处发布的文章不在该文件中。我需要能够将延续令牌发送给客户端,然后在下一个请求中设置它。我怎么做?我需要能够为谷歌数据存储github.com/googleapis/nodejs-datastore/blob/… 执行此处显示的操作
    • @EmreKenci 请查看我的更新答案。我对其进行了测试以成功记录数据。
    • 完美。谢谢你,杰。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 2020-10-14
    • 2019-09-17
    • 1970-01-01
    相关资源
    最近更新 更多