我已经阅读了一些示例代码(尤其是来自 Couchbase Model Views 演示项目链接)并意识到 map() 函数是如此奇怪。
function(doc, meta) {
if (doc.type == "beer" && doc.name){
emit(doc.name, null);
}
}
为什么发出函数的值为空,但 GetView("beers", "beer") 的结果却完美地获得了值???
请帮帮我!
在 couchbase 中,通常视图的结果集是在后台构建的。例如,如果您有 100 万个每个 4Kb 大小的文档而没有任何视图,则磁盘上大约需要 4Gb。当您使用地图功能创建视图时
function(doc, meta) {
emit(doc.name, doc);
}
因此,查看结果需要额外的 4Gb 磁盘空间,因为查看结果是单独存储的。在大多数情况下(如果您使用 param 查询视图Stale=Ok
)couchbase 返回来自“预编译”记录集的结果,couchbase 不会扫描每个查询的所有文档。
因此,在 map 函数中使用 null 可以防止磁盘空间的使用,也可以提高索引过程的速度。
现在关于沙发底座魔术的第二个问题是“GetView("beers", "beer") 的结果完美地获得了价值”。Couchbaseget(key)
和getMulti(keys)
操作非常快。因此,当您查询发出null
它的视图时,它不仅返回nulls
,它还返回文档 ID。然后,您可以手动使用getMulti
该文档 ID 数组来获取文档的值,或者在某些 SDK 中调用查询参数IncludeDocs
,它会自动执行相同的操作。