couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Robert Newson <rnew...@apache.org>
Subject Re: JSON arrays in CouchDB
Date Sat, 30 Mar 2013 17:21:44 GMT
Oh, you said you were using CouchDB at the start of this.

B.

On 30 March 2013 17:12, John <john.mg.allen@gmail.com> wrote:
> That makes sense, I thought (hoped) that the filter function just ignored
> them.
>
> I'm using an android client (TouchDB) to do a filtered replication. Soon as
> I have any mention of docs.countries in the filter function it fails to
> replicate. I get an IOException error, which I assume is due to the fact
> docs.countries is failing and causing nothing to get replicated. If I
> filter on docs.expiryDate alone it works.
>
>
> On 30 March 2013 16:59, Robert Newson <rnewson@apache.org> wrote:
>
>> You'll need guard clauses for the presence of the countries field,
>> design documents get replicated too :)
>>
>> You haven't specified what isn't working afaict. Can you clarify?
>>
>> B.
>>
>> On 30 March 2013 16:45, John <john.mg.allen@gmail.com> wrote:
>> > Yes all docs (apart from the design docs) have the countries field, and
>> it
>> > always has atleast one entry. Would the fact expriyDate can sometimes be
>> > set to null be an issue? Although the only working filter function I've
>> > been able to create so far is with expiryDate.
>> >
>> > I tried your sample code and still can't get it to work, even with some
>> > variations. I'm currently installing CouchDB on my desktop, as I'm
>> assuming
>> > then atleast I'll get access to the error logs, as iriscouch, which im
>> > currently using doesn't provide them for free accounts
>> >
>> >
>> > On 30 March 2013 15:27, Robert Newson <rnewson@apache.org> wrote:
>> >
>> >> do *all* docs have a "countries" field? You'll be throw exceptions for
>> >> docs that don't. Also, a filter function is expecting true/false
>> >> responses. Something more like;
>> >>
>> >> function(doc, req) {
>> >>   if (!doc.expiryDate) return false;
>> >>   if (!doc.countries) return false;
>> >>   if (!req.query.today) return false;
>> >>   if (!req.query.country) return false;
>> >>
>> >>   return doc.expiryDate > req.query.today &&
>> >> doc.countries.indexOf(req.query.country) !== -1;
>> >> }
>> >>
>> >> On 30 March 2013 14:44, John <john.mg.allen@gmail.com> wrote:
>> >> > How does CouchDB handle JSON arrays? I'm trying to create a filter
for
>> >> > selective replication and I've tried everything to try and iterate
>> >> through
>> >> > the contents of an json array to check the contents but nothing seems
>> to
>> >> > work. My code is:
>> >> >
>> >> > function (doc, rec) {
>> >> > if (doc.expiryDate == null &&
>> doc.countries.indexOf(rec.query.country) !=
>> >> > -1) {
>> >> >     return doc;
>> >> > } else {
>> >> >     var expiry = doc.expiryDate;
>> >> >     if (expiry > rec.query.today
>> >> > && doc.countries.indexOf(rec.query.country) != -1) {
>> >> >         return doc;
>> >> >     }
>> >> > }}
>> >> >
>> >> > And the JSON looks like:
>> >> >
>> >> >
>> >> > "countries": [
>> >> >    "GB",
>> >> >    "US"],
>> >> >
>> >> > I've ran out of ideas of how to get this working now, although I'm
>> sure
>> >> the
>> >> > problem is "doc.countries"
>> >>
>>

Mime
View raw message