簡體   English   中英

CouchDB / PouchDB將值傳遞給MapReduce

[英]CouchDB / PouchDB Pass values to MapReduce

因此,我在使用PouchDB和MapRepduce搜索HTML5畫布中的持久圖形對象方面頗具創意。 (我試圖通過簡單的邊界框邏輯來判斷用戶是否點擊了該對象)。 這可能很愚蠢,但我只想這樣做,因為我很傻。

就是說,我想將一對自定義值傳遞給我的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)
})

現在它不起作用,因為reduce函數無法訪問x和y值,因為由於某種原因,它們無法在運行函數的范圍內訪問。 因此,我認為我需要通過該查詢方法將它們傳遞給Pouch / Couch。 我有點卡在這里。

擁有使x和y參數更易於訪問的“ createReduce”函數是否足夠?

var createReduce = function(x,y) { return function(keys, values, rereduce) {...} }

似乎我正在嘗試做不可能的事情,並且我真的不需要此特定應用程序的持久性。 此外,更復雜的面向圖形的空間查詢將需要更專業的數據持久性和操縱框架。 以后我會做這樣的事情。

就是說,這里有一些有用的基於過濾器的bbox代碼,可以幫助那些將來可能會走我自己路線的無畏編碼人員。

var db = {
  // 2d, canvas-related data store and methods
  px: {
    store: [],
    add: function (obj) {
      db.px.store.push(obj)
    },
    pick: function (x, y) {
      return db.px.store.filter(function (obj) {
        return x >= obj.x
          && x < obj.x + obj.w * gfx.px.ratio
          && y >= obj.y
          && y < obj.y + obj.h * gfx.px.ratio
      })
    }
  }
}

這適用於格式如下的圖形對象:

{
  x: 0, y: 0, w: 0, h: 0
}

我希望這對將來嘗試做我正在做的事情的人有所幫助。

此外,gfx.px.ratio變量用於實現Hi-DPI(視網膜)顯示兼容性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM