替代 CosmosDB 中的 having 子句

Substitute for having clause in CosmosDB

我有以下查询结果,其中计数字段派生自聚合函数

[
    {
        "count": 1,
        "facilityName": "Hyundai Service Center"
    },
    {
        "count": 2,
        "facilityName": "Honda Service Center"
    },
    {
        "count": 1,
        "facilityName": "Kat Service Center"
    }
]

我只想显示计数 >= 2 的那些 facilityName。

我们怎样才能做到这一点?

我尝试用存储过程实现你的需求,请参考我的SP代码:

function sample(idArray) {
    var collection = getContext().getCollection();

    var length = idArray.length;

    var sqlQuery = {
        "query":  'SELECT count(c.id) as cnt, f.facilityName from c join f in c.facilities '+
        'where array_contains( @idArray,c.id,true) ' +
        'AND c.entityType = "ServiceInformationFacility" group by f.facilityName',
        "parameters": [
            {"name": "@idArray", "value": idArray}
        ]
    }

    // Query documents and take 1st item.
    var isAccepted = collection.queryDocuments(
        collection.getSelfLink(),
        sqlQuery,
    function (err, feed, options) {
        if (err) throw err;
        if (!feed || !feed.length) {
            var response = getContext().getResponse();
            response.setBody('no docs found');
        }
        else {
            var response = getContext().getResponse();
            var returenArray = [];
            for(var i=0;i<feed.length;i++){                
                if(feed[i].cnt==length)
                    returenArray.push(feed[i])
            }

            response.setBody(returenArray);
        }
    });

    if (!isAccepted) throw new Error('The query was not accepted by the server.');
}

输入参数:

["6ECF4568-CB0E-4E11-A5CD-1206638F9C39","2ECF4568-CB0E-4E11-A5CD-1206638F9C39"]

获取输出:


更新:

所以,如果你的集合是分区的,那么存储过程可能不适合你,因为分区键是执行SP.Please所必需的,请参阅我在这个线程中的详细解释:

实际上,我上面的spcode.It中没有复杂的逻辑,只是循环sql的结果并尝试找到object.count等于idArray.length哪个表示 object.facilityName 存在于所有文档中。

所以,你不必使用 SP,你可以使用任何一小段代码来处理我上面描述的逻辑。