Actually no -- if you put to an update handler with an existing docid, the
handler gets a full copy of the then-current doc, _rev and all. As such, the
version conflict doesn't happen before the update function unless the first
update function completes during the operation of the second. This means
that you can use them for a counter (say) without requiring your clients to
know document _rev's, as in:

http://stackoverflow.com/questions/2972068/couchdb-document-update-handlers-in-place-updates

On Tue, Apr 5, 2011 at 7:19 PM, Sean Copenhaver
<[email protected]>wrote:

> Keep in mind that besides both being doc db's they are very different
> products.
>
> Also I'm not positive how far update functions can go. I believe the
> version conflict happens before your update function.
>
> You should evaluate if you are trying to use couchdb too much like the
> average relational db. Also think about if you can break up the docs in an
> appropriate way to avoid the conflicts.
>
>
>
> On Apr 5, 2011, at 7:12 PM, Dennis Clark <[email protected]> wrote:
>
> > What's your actual function? Update functions should work fine for your
> use case, but can be a little finicky to get working, particularly the first
> time.
> >
> > On Apr 5, 2011, at 7:01 PM, Luis Miguel Silva <
> [email protected]> wrote:
> >
> >> Thank you! I'll probably have to evaluate it then...
> >>
> >> I've looked at the update handlers but i can't get them to work :o\...
> >> I'm creating a _design document with a "updates" field with an update
> >> function inside but i can't seem to get it to work.
> >>
> >> Either way, i think it's time i evaluate MongoDB :o((... (this was
> >> unexpected, i was completely sold on CouchDB :o|).
> >>
> >> On Tue, Apr 5, 2011 at 4:50 PM, Sean Copenhaver
> >> <[email protected]> wrote:
> >>> Ah, the problem is that couchdb does not do partial updates. It writes
> the whole doc. MongoDB I believe does support partial updates though. No
> experience with it.
> >>>
> >>>
> >>>
> >>> On Apr 5, 2011, at 6:41 PM, Luis Miguel Silva <
> [email protected]> wrote:
> >>>
> >>>> More or less!
> >>>>
> >>>> The most common scenario will be:
> >>>> - two or more processes writing to the same document, but only to a
> >>>> specific attribute (not overwriting the whole document)
> >>>>
> >>>> If, by any chance, two processes overwrite the same field, i'm ok with
> >>>> the last one always winning.
> >>>>
> >>>> Thanks,
> >>>> Luis
> >>>>
> >>>> On Tue, Apr 5, 2011 at 4:26 PM, Robert Newson <
> [email protected]> wrote:
> >>>>> "Ideally, we would be able to update without specifying the _rev,
> just
> >>>>> posting (or, in this case PUTting) to the document..."
> >>>>>
> >>>>> So you want to blindly overwrite some unknown data?
> >>>>>
> >>>>> B.
> >>>>>
> >>>>> On 5 April 2011 22:57, Zachary Zolton <[email protected]>
> wrote:
> >>>>>> Luis,
> >>>>>>
> >>>>>> Checkout _update handlers:
> >>>>>>
> >>>>>> http://wiki.apache.org/couchdb/Document_Update_Handlers
> >>>>>>
> >>>>>>
> >>>>>> Cheers,
> >>>>>>
> >>>>>> Zach
> >>>>>>
> >>>>>> On Tue, Apr 5, 2011 at 4:46 PM, Luis Miguel Silva
> >>>>>> <[email protected]> wrote:
> >>>>>>> Dear all,
> >>>>>>>
> >>>>>>> I'm trying to play around with updates and i'm bumping into some
> problems.
> >>>>>>>
> >>>>>>> Let's image we have to clients that poll a document from the server
> at
> >>>>>>> the same time and get the same _rev.
> >>>>>>> Then one of them updates the doc based on the _rev it got:
> >>>>>>> [root@xkitten ~]# curl -X PUT -d
> >>>>>>> '{"_rev":"3-0d519bcf08130bf784f3c35d79760740","hello2":"fred2"}'
> >>>>>>> http://localhost:5984/benchmark/test?conflicts=true
> >>>>>>> {"ok":true,"id":"test","rev":"4-03640ebafbb4fcaf127844671f8e2de7"}
> >>>>>>> Then another one tries to update the doc based on the same exact
> _rev:
> >>>>>>> [root@xkitten ~]# curl -X PUT -d
> >>>>>>> '{"_rev":"3-0d519bcf08130bf784f3c35d79760740","hello3":"fred3"}'
> >>>>>>> http://localhost:5984/benchmark/test?conflicts=true
> >>>>>>> {"error":"conflict","reason":"Document update conflict."}
> >>>>>>> [root@xkitten ~]#
> >>>>>>>
> >>>>>>> Is there a way to avoid this?! (like...make the update just create
> a
> >>>>>>> new _rev or something)??
> >>>>>>>
> >>>>>>> Ideally, we would be able to update without specifying the _rev,
> just
> >>>>>>> posting (or, in this case PUTting) to the document...
> >>>>>>>
> >>>>>>> Thoughts??
> >>>>>>>
> >>>>>>> Thank you,
> >>>>>>> Luis
> >>>>>>>
> >>>>>>
> >>>>>
> >>>
>

Reply via email to