在couchdb的Javascript查询中嵌入JSON
我有一个大约有一百万行的CouchDB数据库。我希望使用外部json中的键查询数据库中的特定行。 以下是我现在为完成这项任务所做的工作:在couchdb的Javascript查询中嵌入JSON,javascript,json,couchdb,Javascript,Json,Couchdb,我有一个大约有一百万行的CouchDB数据库。我希望使用外部json中的键查询数据库中的特定行。 以下是我现在为完成这项任务所做的工作: for i in test_json: view = ViewDefinition('state', state_name.lower(),"""{function (doc){ if(doc._id == """+i+"""){ emit(doc._id,[doc
for i in test_json:
view = ViewDefinition('state', state_name.lower(),"""{function (doc){
if(doc._id == """+i+"""){
emit(doc._id,[doc.user_location,doc.user_project_links])
}}}""")
view.sync(db)
db.commit()
但这会为从json到查询的每个输入创建一个单独的视图
所以我的问题是:
是否有一种方法可以解析Couchdb中javascript查询中的json,以便最终创建一个视图?您不应该每次都创建新视图。这是CouchDB的优点-保存的视图被索引并执行得非常快。如果您在数百万个文档(不是行,这不是RDBMS)上创建新视图,则需要时间对它们进行索引。 您应该在CouchDB中创建一次视图,例如通过Futon。 视图的映射函数应如下所示:
function(doc) {
emit(doc._id, [doc.user_location,doc.user_project_links])
}
接下来,您可以通过向查询传递键来查询数据库。您可以传递单个键:{key=value},多个键:{key:{…}},或者使用startkey
和endkey
参数。这些键将根据emit语句中的键进行筛选,在本例中为doc.\u id
请看这里:
另外,请记住,如果需要访问文档的多个字段,最好将文档从视图中排除,并在视图的查询中使用include\u docs=true
。您将始终在响应中拥有密钥和文档id,因此y也可以使用后者来检索文档。发出的值实际上是视图的一部分,并占用额外的磁盘空间
希望这有帮助