通过另一个(Python)中的ID从一个couchdb doc中提取数据

时间:2010-10-29 13:16:47

标签: python couchdb flask

我在CouchDB中有两个数据库 - DB1的文档是用户数据 - 名称,电子邮件地址,用户名,密码但在一个字段中我存储了保存在用户项目中的DB2中保存的ID列表(包含用户名字段和一些Textfields。

    Example DB1 Document (Users)

       {
   "_id": "bobsmith1000",
   "_rev": "83-1e00173cac0e736c9988d3addac403de",
   "first_name": "Bob",
   "password": "$2a$12$sdZUkkyDnDePQFNarTTgyuUZS6DL13JvBk/k9iUa5jh08gWAS5hpm",
   "second_name": "Smith",
   "urls": null,
   "email": "bob@smith.com",
   "projects": [
       "ee5ccf56da22121fd71d892dbe051746",
       "ee5ccf56da22121fd71d892dbe0526bb",
       "ee5ccf56da22121fd71d892dbe053433",
       "ee5ccf56da22121fd71d892dbe056c71",
       "ee5ccf56da22121fd71d892dbe0579c3",
       "ee5ccf56da22121fd71d892dbe05930d"
   ]
}

Example DB2 Document (Projects)

{
   "_id": "ee5ccf56da22121fd71d892dbe05930d",
   "_rev": "1-c923fbe9de82318980c7778c4c089321",
   "url": "http://harkmastering.s3.amazonaws.com/testprojects/testfolder.zip",
   "username": "bobsmith1000",
   "time": "2010-10-29 07:13:47.377085",
   "file_size": "5.2 MB"
}

我试图在Python中编写一个视图(使用Flask Web框架和Python Couchdb库),它将检查db1,获取所有项目id,然后转到db2并以批处理方式拉出url,time ,使用匹配的id来为每个文档的文件大小,以便我可以将该数据放在表格中。

我今年早些时候才开始编程,这涉及我只能想象的技巧。任何人都可以帮我找到解决方案吗?

谢天谢地

1 个答案:

答案 0 :(得分:1)

除非你有充分的理由在不同的dbs中拆分你的文档,根据你的问题似乎并非如此,你应该将它们全部保存在同一个数据库中,并在文档上有一些属性来识别它们的类型(比如“type:user”和“type:project”)。

这样你就可以在一个couchdb视图上获得所需的结果而不会有太多麻烦。在视图映射功能中,您只需要发出[“username”,0]和[“username”,“projectname”]等键。在Javascript中将是:

function(doc) {
 if (doc.type == "user") {
  emit([doc._id,0],null);
 } else if(doc.type == "project") {
  emit([doc.username,doc._id],null);
 }
}

他们可以查询该视图并拥有一组有组织的文档。