启动键 endkey 不会按预期筛选包含键数组的记录



我有一个Couch DB map reduce视图,它输出这个;

 {
rows: [
    {
        key: [
            "2014-08-20",
            2,
            "registration"
        ],
        value: 2
    },
    {
        key: [
            "2014-08-20",
            2,
            "search"
        ],
        value: 3
    },
    {
        key: [
            "2014-08-21",
            2,
            "registration"
        ],
        value: 3
    },
    {
        key: [
            "2014-08-21",
            2,
            "search"
        ],
        value: 4
    }
]
}

我需要查询2014-08-20和2014-08-21之间的所有记录。同时,我需要中间的整数值为2,最后一个值为"注册"。

我的卷曲请求URL看起来像这个

BASE_URL?group=true&startkey=["2014-08-20",1,"registration"]
&endkey=["2014-08-21",1,"registration"]

这会过滤掉日期,但不会过滤掉其他元素(整数值和字符串)。有人知道发生了什么事吗?

如有任何帮助,我们将不胜感激。

更新

我的文档结构类似于

[
    {
        platform_version: 2,
        UDID: "EWHSJeNp20sBFuzqcorkKVVi",
        session: {
            timestamp: "2014-08-20T00:00:00.000Z",
            session_id: "kOnNIhCNQ31LlkpEPQ7XnN1D",
            ip: "202.150.213.66",
            location: "1.30324,103.5498"
        },
        events: [
            {
                event_type: "search",
                timestamp: "2014-08-21T00:00:00.000Z",
                location: "1.30354,103.5301",
                attributes: {
                }
            }
        ]
    },
    {
        platform_version: 2,
        UDID: "EWHSJeNp20sBFuzqcorkKVVi",
        session: {
            timestamp: "2014-08-21T00:00:00.000Z",
            session_id: "kOnNIhCNQ31LlkpEPQ7XnN1D",
            ip: "202.150.213.66",
            location: "1.30324,103.5498"
        },
        events: [
            {
                event_type: "search",
                timestamp: "2014-08-21T00:00:00.000Z",
                location: "1.30354,103.5301",
                attributes: {
                }
            }
        ]
    },
    {
        platform_version: 2,
        UDID: "EWHSJeNp20sBFuzqcorkKVVi",
        session: {
            timestamp: "2014-08-20T00:00:00.000Z",
            session_id: "kOnNIhCNQ31LlkpEPQ7XnN1D",
            ip: "202.150.213.66",
            location: "1.30324,103.5498"
        },
        events: [
            {
                event_type: "click",
                timestamp: "2014-08-21T00:00:00.000Z",
                location: "1.30354,103.5301",
                attributes: {
                }
            }
        ]
    }
]

map reduce函数如下所示。

function(doc) {
date = doc.session.timestamp.split("T")[0];
eventArray = doc.events;
for (i = 0; i < eventArray.length; i++) { 
    emit([doc.app_version,eventArray[i].event_type,date],1);
}

}

我更改了钥匙的顺序后,它就开始工作了。但是,我仍然不能使用通配符来查询所有的事件类型。

您得到的文档的第二个数组项不同于1,因为在CouchDB中,使用字典顺序将限制(startkeyendkey)与映射键进行比较。按照字典顺序CCD_ 3。

您需要的是多维查询(CouchDB不支持)、额外的客户端过滤(可能会增加CouchDB和应用程序之间的数据传输)或具有列表功能的额外服务器端过滤(增加查询处理时间)。

如果你的应用程序只需要在键数组的第一个元素上使用范围进行筛选(就像在你的示例查询中一样),你可以通过将项目放在数组的最后一个位置来轻松解决问题,例如发出[1, "registration", "2014-08-21"]而不是["2014-08-21", 1, "registration"]

相关内容

  • 没有找到相关文章

最新更新