因此,我在使用PouchDB和MapRepduce搜索HTML5画布中的持久图形对象方面有点创意。 (我试图告诉用户是否用简单的边界框逻辑单击了该对象)该部分并不是那么重要;这可能很愚蠢,但我只是想做到这一点,因为我是一个这样的人。CouchDB/PouchDB将值传递给MapReduce
这就是说,我想将一对自定义值传递给我的PouchDB查询的reducer函数。我不确定如何做到这一点,确切地说。
这里还挺我在做什么现在:
var x = evt.clientX, y = evt.clientY
var map = function (doc) {
emit('bbox',
{
x0: doc.x,
x1: doc.x + doc.w,
y0: doc.y,
y1: doc.y + doc.h
}
)
}
var reduce = function (keys, values, rereduce) {
return values.forEach(function (bbox) {
if (x >= bbox.x0 && x < bbox.x1 && y >= bbox.y0 && y < bbox.y1) {
return true
}
})
}
var result = db.px.query({map: map, reduce: reduce}, function (err, rsp) {
cb(rsp)
})
它不工作,因为现在的减少功能无法访问,因为x和y的值,因为某些原因,他们无法访问从功能运行的范围来看。所以,我想通过查询方法,我需要将它们传递给Pouch/Couch。我有点卡在这里。
'map'和'reduce'函数都是'.toString''d然后'eval''d使放射方法在里面可用([source](https://github.com/daleharvey/pouchdb) /blob/master/src/plugins/pouchdb.mapreduce.js#L109-L118))。这抛弃了它们最初定义的任何上下文,所以这不起作用。 – chesles
@chesles我想我要做的是永远不可能做的事情。在那种情况下,我会用二十一点和水烟袋制作我自己的客户数据库。感谢您的见解。 –
@CryptoQuick是的它听起来不像map-reduce特别适合你想要做的事情。但是,您可以通过像使数据库密钥正确并且简单的范围查询可能工作得很好的方式来完成此任务。查看[levelup](https://github.com/rvagg/node-levelup)和[level.js](https://github.com/maxogden/level.js)浏览器的后端。 – chesles