【问题标题】:is there a query in cosmos documentDB with a search until rulecosmos documentDB 中是否存在带有搜索直到规则的查询
【发布时间】:2018-04-11 18:29:34
【问题描述】:

所以我试图从 cosmos documentdb 数据库中查询一些数据,如下所示

这是我的数据:

{

"id": "**********",

"triggers": [
    {
        "type": "enter_an_area",
        "trigger_identity": "***********",

        },

    },
    {
        "type": "enter_an_area",
        "trigger_identity": "********",

        },

    },
    {
        "type": "exit_an_area",
        "trigger_identity": "*******",


    },

这是我收藏的一个文档,其中我为每个具有唯一 ID 的用户提供了一个文档,现在我要做的是计算使用特定触发器的用户数量,一个用户可能有多个相同的触发器有时,正如您在示例“enter_an_area”中看到的那样,“enter_an_area”有多个条目,但我仍然想将其算作一个条目。

我使用此查询来获取特定触发器的计数:

SELECT VALUE COUNT(1) FROM u JOIN t in u.triggers WHERE CONTAINS(t.type, "enter_an_area")

但是对于上面的示例,这将返回:2 我希望它返回 1

在 documentdb 中是否有执行此操作的查询?如果没有这样的查询,有没有办法返回没有重复的结果?因为作为一种解决方案,我认为我可以返回使用此特定触发器的 ID,但是当用户有多个触发器输入时,我会得到重复的 ID。

【问题讨论】:

    标签: azure azure-cosmosdb document-database


    【解决方案1】:

    您的问题似乎与distinct 之类的函数有关,查询的结果连接了一个数组。我建议您使用存储过程来实现您的解决方案作为一种解决方法。

    请参考我的示例存储过程:

    function sample() {
        var collection = getContext().getCollection();
        var isAccepted = collection.queryDocuments(
            collection.getSelfLink(),
            'SELECT u.id FROM u JOIN t in u.triggers WHERE CONTAINS(t.type, "enter_an_area")',
            function (err, feed, options) {
                if (err) throw err;
                if (!feed || !feed.length) getContext().getResponse().setBody('no docs found');
                else {
                    var returnResult = [];
                    var temp =''
                    for(var i = 0;i<feed.length;i++){
                        var valueStr = feed[i].id;
                        if(valueStr != temp){
                            temp = valueStr;
                            returnResult.push(feed[i]) 
                        } 
                    }
                    getContext().getResponse().setBody(returnResult.length);
                }
            });
    
        if (!isAccepted) throw new Error('The query was not accepted by the server.');
    }
    

    希望对你有帮助。

    【讨论】:

    • @ibrahim.bond 您好,请在您的问题中编辑您的评论。谢谢
    • @ibrahim.bond 我试图找出您的进一步解决方案。如果您只修复了 7 种类型,我认为您的编辑方式是可以的。
    • @ibrahim.bond 如果您认为该解决方法有帮助,请标记它以供其他人参考。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    相关资源
    最近更新 更多