通过CosmosDB存储过程中的WHERE子句通过查询创建然后检索文档

时间:2018-06-25 18:22:33

标签: azure azure-cosmosdb

在存储过程中,我发现运行带有collection.queryDocuments(...)子句的WHERE不会返回以前在同一执行中创建的文档。这是预料之中的,并且有什么解决办法吗?

例如,使用以下简化的存储过程:

function createThenQuery() {
    const collection = getContext().getCollection();
    const collectionLink = collection.getSelfLink();
    const response = getContext().getResponse();
    const document = { name: "Some Name" };

    collection.createDocument(collectionLink, document, (err, createdDocument) => {
        const query = `SELECT * FROM c WHERE c.name='${document.name}'`;
        collection.queryDocuments(collectionLink, query, {}, (err, retrievedDocs) => {
            console.log(retrievedDocs.length);
        });
    });
}

这将输出以下内容:

1st run: 0
2nd run: 1
3rd run: 2
etc...

但是,当我删除WHERE子句(SELECT * FROM c)时,它输出以下内容:

1st run: 1
2nd run: 2
3rd run: 3
etc...

在两种情况下,我都希望第二个输出。有什么办法可以解决这个问题,以便它返回使用WHERE子句时的期望值?

我猜这可能是因为在存储过程完成运行并且提交事务之前,某些索引没有被更新吗?也许有一种方法可以禁用它或强制更新?在这种情况下,它是一次性脚本,因此运行速度稍慢也可以。

现在,除了要搜索集合中的文档之外,我还要维护一个单独的数组以供我搜索创建的文档。但这并不理想,因为它增加了一些复杂性。

0 个答案:

没有答案