CouchDB文档地图修改

时间:2014-04-13 14:33:42

标签: javascript couchdb

我是CouchDd的新手,所以我可能错过了文档中的内容。

我想创建一个将放弃doc成员的map函数。注意:我不想实际更改存储的文档只返回结果。

我创建了这张地图。

function(doc) {
    for(i = 0; i < doc.Videos.length; i++)
    {
        delete doc.Videos[i].VideoFrames;
    }
    emit(doc.DeviceId, doc);
}
  • doc.Videos是一个数组
  • 视频的每个元素都有一个memember VideoFrames。

我想从CouchDb返回的文档中删除VideoFrame。

当我运行此地图时,VideoFrame仍然在返回的文档中。我在JSFiddle中使用示例数据运行此映射,它可以正常工作,但是,在couchDB中它不是。

示例文档

{
   "_id": "2e06de647c59fc94524c2f90b7001157",
   "_rev": "1-cb05705a122918c2c53dfb1e01ebed02",
   "TimeStamp": 1397343510,
   "DeviceId": "74a5f7aa9d4dfd0d",
   "Videos": [
       {
           "TimeStamp": 1397343518798,
           "VideoFrames": [
               {
                   "TimeStamp": 1397343519515,
                   "JPEG_Base64Frame": "iVBORw0KGgoAAAANSUh...==\n"
               }
           ]
       }
   ],
   "GeoLocations": [
       {
           "TimeStamp": 1397343512,
           "Latitude": 41.5654724,
           "Longitude": -87.5268132
       }
   ]
}

2 个答案:

答案 0 :(得分:2)

CouchDB密封doc对象阻止它进行任何修改,因为它被认为是视图索引更新时来自同一设计文档的所有地图函数。如果要修改它并发出结果,则应首先制作副本并修改该副本而不是原始doc对象。

答案 1 :(得分:1)

修改

我误解了这个问题。似乎op只想从最终结果中删除视频帧。这是你如何做到的

  function(doc) {
    var newDoc = doc;
    for(i = 0; i < newDoc.Videos.length; i++)
    {
        delete newDoc.Videos[i].VideoFrames;
    }
    emit(doc.DeviceId, newDoc);
}