I'm working on some changes for the officeradar
<https://github.com/tleyden/office-radar> demo app and trying to show a
list of profiles which I want to have reverse sorted by how recent they've
had a geofence event for that profile.  Eg:

[Traun entered SF 5 hours ago]
[Zack entered SF 8 hours ago]
[Hideki entered MV 2 days ago]

The document model is as follows:

*Profile doc*

{
   "_id":"tleyden",
   "lastGeofenceEvent":"doc-234324232"
}

*GeofenceEvent doc*

{
   "id":"doc-234324232",
   "createdAt":"2014-10-24",
   "beaconLocation":"sf"
}


As I was writing the map function to generate the UI mentioned above, I
wanted to emit the createdAt field, but realized that would require a doc
lookup.  Eg:

Mapper map = new Mapper() {
                @Override
                public void map(Map<String, Object> document, Emitter
emitter) {
                    if (document.get("type").equals("profile")) {

                        // I have a profile doc, but I only have the id of
the
                        // latest geofence event associated with this
profile,
                        // and I'd need to do a db lookup to get it, which
                        // would violate the rules of a map function .. so
I'm stuck

                    }
                }
            };

*Proposed solution*

I figured I could add a new field to the profile doc to hold the date of
the latest geofence event associated with this profile (denormalize +
duplicate):

Profile doc (updated):

{
   "_id":"tleyden",
   "lastGeofenceEvent":"doc-234324232",
   "lastGeofenceEventCreatedAt":"2014-10-24"
}

The map function would become:

                  if (document.get("type").equals("profile")) {

                        emit(document.get("lastGeofenceEventCreatedAt"),
...);

                   }

and the problem would be solved.

But, I'm wondering is this the best practice or is there a better way?
 @Jens I remember in your advanced couchbase lite talk you mentioned "poor
man's joins", but I didn't catch the details.  Would that apply here?

-- 
You received this message because you are subscribed to the Google Groups 
"Couchbase Mobile" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/mobile-couchbase/CACSSHCEyDD2EdKYVERZAcdG5N5VjonGaeHSW1mntX8DXeWYLTw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to