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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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" > >> >
