我是 couchbase 的新手,我正在尝试在我的一个 Android 应用程序中实现 couchbase lite。我特别挣扎的是文档中所述视图的概念和地图功能的规则。
在数据库中,应用程序存储具有各种文档类型的文档。在一个查询中,我需要按文档类型(“payments”)和文档属性的值(doc [“approved”] = true)获取整个文档
因此我会创建一个像这样的视图:
com.couchbase.lite.View view = database.getView("payments");
if (view.getMap() == null) {
Mapper map = new Mapper() {
@Override
public void map(Map<String, Object> doc, Emitter emitter) {
if (doc.get("type").equals("payments") && doc.get("approved") == true) {
emitter.emit(doc.get("name"), doc);
}
}
};
view.setMap(map, "1");
}
请注意,doc["approved"] 值可以随着时间的推移而更新。在文档中有关地图功能的规则之一中,它说:
它必须是一个“纯”函数:......这意味着任何时候用相同的输入调用它,它必须产生完全相同的输出。
如上所示的 map 函数的实现会违反该规则吗?在文档中它进一步说:
尤其要避免这些常见错误: ...不要对何时调用 map 函数做任何假设。这是索引器的实现细节。(例如,每次文档更改时都不会调用它。)。
这是否意味着当其中一个文档的批准状态从 false 更新为 true 时,以下查询不一定包含更新的文档?如果是这样,我需要做什么来实现这一目标?我很不确定这究竟意味着什么规则?有人可以试着睁开我的眼睛吗?