couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Paul Davis" <paul.joseph.da...@gmail.com>
Subject Re: View with incremental counter
Date Tue, 18 Nov 2008 13:27:38 GMT
Counters like this won't work. Your map function *must* return the
exact same output for identical inputs. Imagine you generate the view
once. Then edit a document. When it goes back through the map view
your function would give it a new counter. Assuming your documents are
edited in a non-deterministic order you won't be able to rely on the
counter to mean anything.

The only thing you could *almost* but not quite rely on it for would
be to get the list of documents in the order of their last edit. And
when I say almost, I mean it'll never work. But luckily there's
_all_docs_by_seq which does exactly that.

HTH,
Paul

On Tue, Nov 18, 2008 at 8:14 AM, Adam Groves <adam.groves@gmail.com> wrote:
> yeah but then my counter is still tied to the age of the document. Say
> I'd like to return a list of documents sorted by name.
>
> I'd have a view like this:
>
> count = 0;
> function(doc) {
>  if(doc.type == "document") {
>   count = count + 1
>   emit(doc.name, count);
>  }
> }
>
> I then create 4 documents in this order: Doc2, Doc3, Doc1, Doc4.
>
> The above view would give me the following results:
> Key     Value
> -------------------
> Doc1      2
> Doc2      4
> Doc3      3
> Doc4      1
>
> Which is not what I'm after.
>
> 2008/11/18 Ulises <ulises.cervino@gmail.com>:
>> That's what I thought. The output is definitely sorted by key, but the
>>> document with a 'count' of one is in the middle of my results.
>>>
>>> I just tried this view for debugging:
>>>
>>> count = 0;
>>> function(doc) {
>>>  if(doc.type == "document") {
>>>    count = count + 1
>>>     emit(doc._id, [count, doc.updated_at]);
>>>  }
>>> }
>>>
>>> and it turns out that the document with a count of 1 is the most
>>> recently updated document.
>>>
>>
>> But isn't the signature of the emit fn emit(key, value)? Wouldn't it make
>> more sense then to emit([doc._id, count], some_value) however even then it'd
>> end up sorted only by doc._id. Perhaps emit([count, doc._id], some_value)
>> would do the trick.
>>
>> U
>>
>

Mime
View raw message