我试图弄清楚如何通过node.js在cosmosDB中编写查询,这将允许我在查询中命名表,以便可以选择该表中的所有项目。 以下设置有效,
cosmosClient.database('samples')
.container('container_id')
.items.query(querySpec).toArray()
.then(results => console.log(results))
.catch(error => console.log(error));
但是,如果使用container
方法,但我必须使用表/集合的名称作为参数,但是我想实现的是使用这样的查询的方式:SELECT * FROM colleciton_id...
我看到cosmosDB有一个containers
道具,它说允许您针对所有容器/集合进行查询,但是当我尝试时:
cosmosClient.database('samples').containers.query(querySpec).toArray()
.then(results => console.log(results))
.catch(error => console.log(error));
我得到了一个集合名称数组,而不是指定集合中的所有项目。
是否有一种无需使用container(id)
即可针对集合编写查询的方法?
答案 0 :(得分:0)
通过容器,sdk表示收集。 SQL查询是在集合级别执行的,因此,如果您编写类似select * from xxx
的内容,则xxx不必是集合的名称。 CosmosDB将知道您已经定位到哪个目标,而xxx将类似于别名。集合名称已在container()
方法中定义。
cosmosClient.database('samples').containers
方法将返回数据库中所有集合的枚举。
如果要进行交叉集合查询,您需要做的是遍历这些集合,并对每个集合进行此操作。
cosmosClient.database('samples')
.container(containerId)
.items.query(querySpec).toArray()
.then(results => console.log(results))
.catch(error => console.log(error));
其中containerId
是迭代中的当前collectionid。
但是,我警告您,如果需要交叉收集查询,那么数据库设计可能有问题。