首页 > 解决方案 > Azure CosmosDb 存储过程从字符串数组中选择查询

问题描述

我正在写一个 SP 来删除一些记录。所以我需要获取记录 id 作为字符串数组传递的记录。

function DeleteFn(email, docs) {
var container = getContext().getCollection();
var containerLink = container.getSelfLink();

var documentQuery =
{
    'query': 'SELECT * FROM c where c.email = @email and ARRAY_CONTAINS(@arr, c.id) ',
    'parameters': [{ 'name': '@email', 'value': email }, { 'name': '@arr', 'value': docs }]
};

container.queryDocuments(containerLink, documentQuery,
    function (err, items) {
            items.forEach(element => {
                container.deleteDocument(element, {}, function (err, responseOptions) {
                    if (err) throw err;
                });
            });
        }
    });
} 

其中电子邮件 = 'test@test.com' 和 docs = ["doc1","doc2"]

收到 JSON.Parse(docs) 的解析错误。

如何执行此或任何更好的直接删除方法?

标签: asp.net-coreazure-cosmosdb

解决方案


方法的第一个参数deleteDocument应该是documentLink。因此,您需要将代码更改为:

container.deleteDocument(element._self, {}, function (err, responseOptions)

然后,如果您将记录 ID 作为字符串类型传递,则需要像这样更改代码:

'parameters' : [{'name':'@email', 'value':email}, { 'name': '@arr', 'value': JSON.parse(docs) }]

在此处输入图像描述

如果您将记录 ID 作为自定义类型传递,您的代码可以正常工作。

'parameters': [{ 'name': '@email', 'value': email }, { 'name': '@arr', 'value': docs }]

在此处输入图像描述


推荐阅读