CouchDB在运行时映射/减少任何文档属性?

Xeo*_*oss 4 couchdb document-database

我来自一个SQL世界,其中查找由几个对象属性(published = TRUE或user_id = X)完成,并且在任何地方没有连接(因为1:1缓存层).似乎文档数据库非常适合我的数据.

我试图找出是否有办法将一个(或多个)对象属性传递给CouchDB map/reduce函数,以便在数据库中查找匹配的文档,而无需为每种文档类型创建数十个视图.

是否可以传递所需的文档属性键以在运行时匹配CouchDB并让它返回匹配的对象(或匹配分页的对象的数量)?

例如,在一个页面上,我想要所有带有doc.user_idX的帖子doc.published.在另一个页面上,我可能希望所有带有doc.tags[]"sport"标签的文档.

mad*_*lep 6

您可以构建一个迭代文档中的键的视图,并发出一个键[propertyName, propertyValue]- 这样您就可以构建一个具有EVERYTHING prop/value的索引.将是巨大的,不知道如何构建性能和磁盘使用(可能是坏的).

地图功能看起来像:

// note - totally untested, my CouchDB fu is rusty
function(doc) {
  for(prop in doc) {
    emit([prop, doc[prop]], null);
  }
}
Run Code Online (Sandbox Code Playgroud)

适用于简单属性的基本情况,可以扩展为智能数组,并为数组中的每个项发出一个prop/value对.那会让你处理标签.

要对其进行查询,请在视图上将[prop]设置为查询键.