CouchDB: 'badmatch' when executing view
I’ve been playing around with CouchDB again in my annual attempt to capture the links appearing on my twitter stream and I managed to create the following error for myself:
$ curl http://127.0.0.1:5984/twitter_links/_design/cleanup/_view/find_broken_links
{"error":"badmatch","reason":"{\n \"find_broken_links\": {\n \"map\": \"function(doc) { \nvar prefix = doc.actual_link.match(/.*/); \n if(true) { emit(doc.actual_link, null); } }\"\n }\n}"}
It turns out this error is because I’ve managed to create new line characters in the view while editing it inside CouchDBX. D’oh!
A better way is to edit the view in a text editor and then send it to CouchDB using curl.
The proper way to update a view would be to add a '_rev' property to the body of the JSON document but I find it annoying to go and edit the document so I’ve just been deleting and then recreating my views.
$ curl -X GET http://127.0.0.1:5984/twitter_links/_design/cleanup/
{"_id":"_design/cleanup","_rev":"1-8be14d29f183b61f1ade160badef3f75","views"...}
$ curl -X DELETE http://127.0.0.1:5984/twitter_links/_design/cleanup?rev=1-8be14d29f183b61f1ade160badef3f75
{"ok":true,"id":"_design/cleanup","rev":"2-9fa15c1fdbb7cbaa659d623bc897b9da"}
$ curl -X PUT http://127.0.0.1:5984/twitter_links/_design/cleanup -d @cleanup.json
{"ok":true,"id":"_design/cleanup","rev":"17-b0763381b79f3fda843f57a7dcc842e1"}
I guess there’s probably a library somewhere which would encapsulate all that for me but I’m just hacking around at the moment.
It’s interesting to to see how you interact differently with a document database compared to what you’d do with a relational one with respect to optimistic concurrency.
About the author
I'm currently working on short form content at ClickHouse. I publish short 5 minute videos showing how to solve data problems on YouTube @LearnDataWithMark. I previously worked on graph analytics at Neo4j, where I also co-authored the O'Reilly Graph Algorithms Book with Amy Hodler.