在存储过程中,我发现运行带有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
子句时的期望值?
我猜这可能是因为在存储过程完成运行并且提交事务之前,某些索引没有被更新吗?也许有一种方法可以禁用它或强制更新?在这种情况下,它是一次性脚本,因此运行速度稍慢也可以。
现在,除了要搜索集合中的文档之外,我还要维护一个单独的数组以供我搜索创建的文档。但这并不理想,因为它增加了一些复杂性。