如何使用Mango查询couchDB获取无限文档而不提供“限制”字段?

时间:2017-08-11 10:20:45

标签: couchdb couchdb-mango

我在沙发数据库中使用Mango查询几乎每个查询都可以查找文档。在这里,我在获取与给定条件匹配的所有文档时遇到问题。问题是芒果查询的默认限制是25(意味着每个查询获取25个文档)并且我的数据库中有很多文档,而且我没有确切的文档数。我不能硬编码芒​​果查询的限制,因为我不知道文件的上限,我不认为硬编码限制是一个好主意。 有谁可以帮我解决这个问题?如何限制无限制或有其他方法来处理这种情况?

2 个答案:

答案 0 :(得分:0)

我反击了同样的问题并用递归函数解决了它

const batchSize = 25;
let batchCount = 0;
let searchResults = [];

//  in my case I want to find docs with a certain date, hardcoded here as example
let selectedDate = '2017/10/30'; 

// the recursive function
let search = function (count, limit){
    return db.find({
        selector: {
            date: selectedDate  
        },
        limit: batchSize,
        skip: batchCount*batchSize 
    }).then(function(batch){
        if (batch.docs.length === 0){
            // there are no (more) search results, so we can return what we have

            return searchResults

        } else {
            // there may be more search results, so we add this batch to the result and call the function again to ask more. We increase the counter so that the first batch(es) are skipped

            for (var i = 0; i < batch.docs.length; i++) {
                searchResults.push(batch.docs[i])
            }
            batchCount ++
            return search(batchCount, batchSize) 
        }
    })
}

search(batchCount, batchSize).then(function(result){
    // you can handle the searchresults

})

答案 1 :(得分:0)

显然,每个 _find 调用都会返回一个 bookmark 键,然后您可以将其传递回另一个 _find 调用以获取下一个“页面”结果(假设第二个查询没有其他任何更改)第一个)。

如果不能保证前面的查询相同,则不确定这种方法有多实用。

我实际上最终使用了@Erik 答案的迭代版本。

在此处查看文档中的 JSON 请求选项:https://docs.couchdb.org/en/latest/api/database/find.html