Oh, you said you were using CouchDB at the start of this. B.
On 30 March 2013 17:12, John <[email protected]> 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 <[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" >> >> >>
