在python应用程序的CouchDB中创建视图

j9per5c4  于 2022-12-09  发布在  CouchDB
关注(0)|答案(2)|浏览(167)

我在CouchDB中有一个数据库,我想知道是否可以直接从python创建一个视图,而不是使用GUI。我是CouchDB的初学者,我需要一个与SQL中的SELECT DISTINCT等效的函数和一个视图,如

function (doc) {
  if(doc.MovieId == "1254")
    emit(doc.Rating, 1);
}

问题是我必须为更多的MovieId(来自键盘输入)创建这个视图。
我问你是否可以直接从python创建/删除这样的视图,因为在网上我什么都没找到。如果不可能,我自己做一个Mango查询和Map结果是个好主意吗?
---编辑---

json_data = {
  "_id": "_design/titaRat",
  "_rev": "3-ceb11154b13457c55b1f98f4e9d15b03",
  "views": {
    "titRat": {
      "map": "function (doc) { var id_prefix = \"ratings :\"; if(doc._id.substr(0, id_prefix.length) === id_prefix && doc.MovieId == \"1721\") emit(doc.Rating, 1);}",
      "reduce": "_count"
    }
  },
  "language": "javascript",
  "options": {
    "partitioned": False
  }
}

db.save(json_data)

ResourceConflict: ('conflict', 'Document update conflict.')

出现此错误,但没有具有此名称文档

nuypyhwy

nuypyhwy1#

我有一个函数:

def createView( dbConn, designDoc, viewName, mapFunction ):
    data = {
            "_id": f"_design/{designDoc}",
            "views": {
                viewName: {
                    "map": mapFunction
                    }
            },
            "language": "javascript",
            "options": {"partitioned": False }
            }
    logging.info( f"creating view {designDoc}/{viewName}" )
    dbConn.save( data )

呼叫示例如下:

mapFunction = '''function (doc) {
                      if( doc.type == 'word')
                      emit(doc.word, doc);
                    }'''
createView( db, "DESIGN_DOC_NAME", "VIEW_NAME", mapFunction )
cx6n0qe3

cx6n0qe32#

你可以从python中创建一个视图,就像你在couch db中创建任何文档一样。
不同之处在于,您需要创建设计文档。

函数的文档如下所示:

{
  "views": {
    "movie_ratings_view": {
      "map": "function(doc) { if(doc.MovieId == "1254") emit(doc.Rating, 1); }",
    }
  }
}

正如你所看到的,map函数被保存为一个字符串。如果你想添加格式,你需要添加它,例如\n\t
要保存此文档,您需要将其POSTPOST /{db}/_design/movie_ratings_ddoc
然后可以通过GET /{db}/_design/movie_rations_ddoc/_view/movie_ratings_view调用视图
每个设计文档可以保存多个视图。
如果要删除视图,可以删除整个设计文档,也可以仅更新设计文档,使视图从对象中删除.
有关如何使用视图的详细信息,请参阅:https://docs.couchdb.org/en/master/api/ddoc/views.html

相关问题