在 couchdb 的 Javascript 查询中嵌入 JSON
Embed JSON in Javascript query in couchdb
我有一个包含大约一百万行的 CouchDB 数据库。我想使用外部 json 中存在的键查询数据库中的特定行。
这是我现在正在做的事情来完成这个任务:
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},多个键:{keys: {...}} 或使用 startkey
和 endkey
参数。这些键是根据您的 emit 语句中的键过滤的,在本例中为 doc._id.
看这里:http://guide.couchdb.org/draft/views.html。
此外,请记住,如果您需要访问文档的多个字段,最好从视图中排除文档并在视图查询中使用 include_docs=true
。您将始终在响应中包含密钥和文档 ID,因此您也可以使用后者来检索文档。您发出的值实际上是视图的一部分并占用额外的磁盘 space.
希望对您有所帮助。
我有一个包含大约一百万行的 CouchDB 数据库。我想使用外部 json 中存在的键查询数据库中的特定行。 这是我现在正在做的事情来完成这个任务:
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},多个键:{keys: {...}} 或使用 startkey
和 endkey
参数。这些键是根据您的 emit 语句中的键过滤的,在本例中为 doc._id.
看这里:http://guide.couchdb.org/draft/views.html。
此外,请记住,如果您需要访问文档的多个字段,最好从视图中排除文档并在视图查询中使用 include_docs=true
。您将始终在响应中包含密钥和文档 ID,因此您也可以使用后者来检索文档。您发出的值实际上是视图的一部分并占用额外的磁盘 space.
希望对您有所帮助。