Skip to content

Instantly share code, notes, and snippets.

@eiri
Created February 21, 2017 14:12
Show Gist options
  • Save eiri/a40bcb2eb9a8b1752d604948e052be04 to your computer and use it in GitHub Desktop.
Save eiri/a40bcb2eb9a8b1752d604948e052be04 to your computer and use it in GitHub Desktop.
Demo on how revs, open_revs and and revs_info act in CouchDB 2.0

Start dev cluster:

$ ./dev/run --admin eiri:eiri
[ * ] Setup environment ... ok
[ * ] Ensure CouchDB is built ... ok
[ * ] Prepare configuration files ... ok
[ * ] Start node node1 ... ok
[ * ] Start node node2 ... ok
[ * ] Start node node3 ... ok
[ * ] Check node at http://127.0.0.1:15984/ ... ok
[ * ] Check node at http://127.0.0.1:25984/ ... ok
[ * ] Check node at http://127.0.0.1:35984/ ... ok
[ * ] Running cluster setup ... ok
[ * ] Developers cluster is set up at http://127.0.0.1:15984.

Create db and some documents (REST client is httpie)

$ http put :15984/db01
{
    "ok": true
}

$ http post :15984/db01 answer=42
{
    "id": "6bc0990c7e884e824a4b51c6b2000cea",
    "ok": true,
    "rev": "1-12d91df5ca27fec407a347319734847b"
}

$ http :15984/db01/6bc0990c7e884e824a4b51c6b2000cea
{
    "_id": "6bc0990c7e884e824a4b51c6b2000cea",
    "_rev": "1-12d91df5ca27fec407a347319734847b",
    "answer": "42"
}

$ http put :15984/db01/6bc0990c7e884e824a4b51c6b2000cea rev==1-12d91df5ca27fec407a347319734847b answer=42 _deleted=true
{
    "error": "doc_validation",
    "reason": "Bad special document member: _deleted"
}

$ http delete :15984/db01/6bc0990c7e884e824a4b51c6b2000cea rev==1-12d91df5ca27fec407a347319734847b 
{
    "id": "6bc0990c7e884e824a4b51c6b2000cea",
    "ok": true,
    "rev": "2-fc8f2b1346096c496b5627cc872aebb7"
}

$ http :15984/db01/6bc0990c7e884e824a4b51c6b2000cea
{
    "error": "not_found",
    "reason": "deleted"
}

Now with open_revs to include all leaf revisions (including deleted) and revs to get detailed info on those revisions.

$ http :15984/db01/6bc0990c7e884e824a4b51c6b2000cea open_revs==all revs==true
[
    {
        "ok": {
            "_deleted": true,
            "_id": "6bc0990c7e884e824a4b51c6b2000cea",
            "_rev": "2-fc8f2b1346096c496b5627cc872aebb7",
            "_revisions": {
                "ids": [
                    "fc8f2b1346096c496b5627cc872aebb7",
                    "12d91df5ca27fec407a347319734847b"
                ],
                "start": 2
            }
        }
    }
]

$ http :15984/db01/6bc0990c7e884e824a4b51c6b2000cea rev==2-fc8f2b1346096c496b5627cc872aebb7
{
    "_deleted": true,
    "_id": "6bc0990c7e884e824a4b51c6b2000cea",
    "_rev": "2-fc8f2b1346096c496b5627cc872aebb7"
}

$ http :15984/db01/6bc0990c7e884e824a4b51c6b2000cea rev==1-12d91df5ca27fec407a347319734847b
{
    "_id": "6bc0990c7e884e824a4b51c6b2000cea",
    "_rev": "1-12d91df5ca27fec407a347319734847b",
    "answer": "42"
}

Now to demostrate what revs_info does on non-deleted document with multiple revisions

$ http post :15984/db01 name=alice
{
    "id": "6bc0990c7e884e824a4b51c6b2001abf",
    "ok": true,
    "rev": "1-2350796167caec1f6ba70e9145a9e102"
}

$ http put :15984/db01/6bc0990c7e884e824a4b51c6b2001abf rev==1-2350796167caec1f6ba70e9145a9e102  name=bob
{
    "id": "6bc0990c7e884e824a4b51c6b2001abf",
    "ok": true,
    "rev": "2-4e8f37cba3bdef099f89bceb9b2f370d"
}

$ http :15984/db01/6bc0990c7e884e824a4b51c6b2001abf
{
    "_id": "6bc0990c7e884e824a4b51c6b2001abf",
    "_rev": "2-4e8f37cba3bdef099f89bceb9b2f370d",
    "name": "bob"
}

$ http :15984/db01/6bc0990c7e884e824a4b51c6b2001abf revs_info==true
{
    "_id": "6bc0990c7e884e824a4b51c6b2001abf",
    "_rev": "2-4e8f37cba3bdef099f89bceb9b2f370d",
    "_revs_info": [
        {
            "rev": "2-4e8f37cba3bdef099f89bceb9b2f370d",
            "status": "available"
        },
        {
            "rev": "1-2350796167caec1f6ba70e9145a9e102",
            "status": "available"
        }
    ],
    "name": "bob"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment