CouchDB-在CouchDB中每50个文档获取一次

CouchDB-在CouchDB中每50个文档获取一次,couchdb,Couchdb,由于某些原因,我需要在我的couchdb中每取50个文档 例如,我的数据库中有500个用户,我想获取第一个、第51个、第101个……第451个用户 如何通过map/reduce函数获得此结果 (我知道我可以在url中设置“skip”参数来执行类似的行为,但我想通过map/reduce来实现) 谢谢 问题 要记住的关键是CouchDB map/reduce更像是CREATE INDEX…,而不是SELECT*FROM… Map/reduce创建一个静态行列表。行可以按您想要的任何顺序排列(按您发出

由于某些原因,我需要在我的couchdb中每取50个文档

例如,我的数据库中有500个用户,我想获取第一个、第51个、第101个……第451个用户

如何通过map/reduce函数获得此结果

(我知道我可以在url中设置“skip”参数来执行类似的行为,但我想通过map/reduce来实现)

谢谢

问题 要记住的关键是CouchDB map/reduce更像是
CREATE INDEX…
,而不是
SELECT*FROM…

Map/reduce创建一个静态行列表。行可以按您想要的任何顺序排列(按您发出的键排序),但一个文档不可能更改另一个文档的结果

为了说明这一点,假设您有一个假设视图,其中有这样的行。键是它们在列表中的“位置”,值是用户名

// View rows (conceptual diagram only)
// Key, Value
0     , "mark" // Suppose Alice was created first, 1 week ago
1     , "bob"  // and Bob was created 1 day ago
2     , "evan" // and Evan was created 1 hour ago... so this view is chronological
... // etc.
现在您意识到Bob的文档有一个错误。他实际上是一年前签约的,不是一天前。你更新他的时间戳。现在的景色应该如何

// View rows (conceptual diagram only)
// Key, Value
0     , "bob"  // The corrected Bob document was created 1 **year** ago
1     , "mark" // ...and now Mark scoots down to the next position (!!!)
2     , "evan" // ...and Evan stayed the same
... // etc.
问题是:在CouchDB中,如果只更改Bob的文档,就不可能影响Mark的行。这是基本架构。上面的
(!!!)
标签表示一个不可能的功能。问题在于我们最初的假设:我们可以有一个视图来指示行之间的相对位置。(注意,relative一词的词根与relative一词的词根相同,如在“关系数据库”中)

因此,这样一种技术是不可能的,通过简化和荒谬

解决方案 您可以使用map/reduce完成大部分需要的工作。使用时间戳作为键,而不是假设的位置作为键

// View rows (conceptual diagram only)
// Key, Value
2011-05-06, "bob"  // Bob signed up one year ago
2012-05-05, "mark" // Mark signed up one day ago
2012-05-06, "evan" // Evan one hour ago
... // etc.
当然,时间戳格式只是一个明确的例子。您可能应该使用ISO8601格式(即从JavaScript中的
JSON.stringify(新日期)
中获得的内容)

要首先获得最新的注册,请对视图进行降序查询;要仅获取一行,请使用
limit
选项

  • 要获得最新注册:
    ?descending=true&limit=1
  • 要获取第50个最新版本:
    ?descending=true&limit=1&skip=50
  • 要获取第100个最新版本:
    ?descending=true&limit=1&skip=100

我想根据更新的时间对我的文档进行排序,并获取最新的、第51个最新的。。。。。用户。在关系数据库(如MySQL)的ORM中,我可以通过以下方式执行:1。按时间2对数据进行排序。User.find(0),User.find(50)真棒!我已经更新了我的答案,以便以CouchDB能够最好的方式解决您的问题。