我是CouchDd的新手,所以我可能错过了文档中的内容。
我想创建一个将放弃doc成员的map函数。注意:我不想实际更改存储的文档只返回结果。
我创建了这张地图。
function(doc) {
for(i = 0; i < doc.Videos.length; i++)
{
delete doc.Videos[i].VideoFrames;
}
emit(doc.DeviceId, doc);
}
我想从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
}
]
}
答案 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);
}