我将CosmosDB Node.js SDK从2.1.5升级到3.5.2,以下代码不再起作用。

client.items.query(myQuery, { partitionKey: "MyPartitionKey" }).toArray()


我将代码更改为以下代码,但是它仍然无法转换(打字稿),显然原因是FeedOptions不再包含partitionKey属性!

client.items.query(myQuery,{ partitionKey: "MyPartitionKey" }).fetchAll()


我在互联网上查找了它,但找不到最新的示例。

任何想法如何解决这个问题?

最佳答案

我找不到来自MS或github源代码的任何最新示例,这确实具有挑战性。

cosmos db节点sdk v3中的FeedOptions类中不再有任何partitionkey属性。在对FeedOptions的github源代码进行深入研究之后,我发现它扩展了另一个接口SharedOptions

node.js - 如何使用Node.js SDK v3.5.2将PartitionKey分配给CosmosDB查询-LMLPHP

它包含initialHeaders属性,因此我想我们可以在REST API Header Lists之后设置分区键值。

node.js - 如何使用Node.js SDK v3.5.2将PartitionKey分配给CosmosDB查询-LMLPHP

无论如何,请参考我的工作代码:

const feedOptions = {
        initialHeaders: {"x-ms-documentdb-partitionkey": '["a"]'}
      };
   const queryIterator = await container.items.query(querySpec,feedOptions);
    while (queryIterator.hasMoreResults()) {
        console.log(await queryIterator.fetchNext());
    }


当然,您可以将其替换为.fetchAll()方法。

07-28 09:23