【问题标题】:Passing an argument to map.js in a CouchApp view在 CouchApp 视图中将参数传递给 map.js
【发布时间】:2011-07-21 10:19:00
【问题描述】:

我有一个功能类似于社交网络的 CouchApp。我有一个点赞按钮,当用户单击它时,它会创建并保存一个 CouchDB JSON 文档,其中包含字段 post_id(点赞的帖子的 ID)、user_id(点赞帖子的用户的 ID)和类型(值为“like”,表示该文档是一个like)。

除了帖子之外,我还想说明它收到的点赞数。我的地图功能如下所示:

function(doc) {
  if (doc.type && doc.type == 'like') {
    emit(doc.post_id, 1);
  }
}

还有我的reduce,这个:

function(post_ids, likes) {
  return sum(likes);
}

我的问题是,此函数返回站点中所有帖子中所有喜欢的总和。我在想我的 reduce.js 很好,也许我可以调整我的 map.js 以接受 post_id 参数,这样我就可以只从那个 post_id 中检索喜欢,但我该怎么做呢? post_id 来自设计文档,当然是点击“Like”按钮的时候。

谢谢。

【问题讨论】:

  • 好的,我刚刚意识到我的目标有问题。我真的应该创建另一个文档,作为特定帖子的点赞数和点赞数的计数器。有时,CouchDB 最困难的事情是当您来自 MySQL 等关系数据库时。你真的应该首先改变你的思维框架。

标签: couchdb mapreduce couchapp


【解决方案1】:

您需要查看group 视图参数。如果不提供查询字符串参数,则默认是减少视图的全部内容。一旦你申请了group=true,你也可以使用keystartkey/endkey来挑选你需要的帖子ID。

另外,built-in reduce functions 可以更有效地执行基本的 reduce 操作。 (因为它们是编译的 erlang 代码,而不是 javascript 源代码)只需将 _count 代替整个 reduce.js。 (你甚至可以在你的emit 中去掉1

【讨论】:

    猜你喜欢
    • 2011-06-27
    • 2018-01-08
    • 2011-10-07
    • 2011-06-16
    • 1970-01-01
    • 2017-12-13
    • 2012-07-09
    • 2013-07-17
    • 2011-12-09
    相关资源
    最近更新 更多