我正在使用Node.js CosmosDB library,并且要检查是否存在某项。
我看过一些推荐以下内容的例子:
const i = container.item(id);
try {
const { item } = await i.read();
// item exists
} catch(e) {
// item does not exist
}
但是我不想使用异常进行流控制。我也想避免使用container.items.query
-如果可能,我想使用container.item
。
我可以这样做吗?
我想知道如何执行此操作的原因是,我需要致电Item.replace
来更新商品,所以我想这样做:
const i = container.item(id);
if (i.exists() === false) {
return;
}
i.replace(replacement);
但是,如果我必须使用container.items.query
,则必须这样做:
const result = container.items.query(myQuery);
if (result.current() === undefined) {
return;
}
container.item(id).replace(replacement);
答案 0 :(得分:1)
现在,404表示我们抛出。
我们正在考虑不扔东西。我刚刚在GitHub上创建了一个项目来进行跟踪。 https://github.com/Azure/azure-cosmos-js/issues/203
根据文档的大小,查询实际上可能更便宜,因为您可以查询的只是id或_etag而不是整个文档。对于小文档,阅读会便宜一些。
作为一种解决方法,增补对您有用吗?
-编辑1-
另一种错误的选择是自己处理错误,因为这是所有承诺。
const handle404 = (err) => {
if(err.code && err.code === 404) {
return { body: undefined, headers: err.headers };
} else {
throw err;
}
}
const { body: item } = await container.item(id).read().catch(handle404);