Hi,
It may help you

com.couchbase.lite.View viewItemsByDate = db.getView("booksForCategory");
viewItemsByDate.setMap(new Mapper() {

HashMap<String, Object> categories = (HashMap<String, Object>) document
.get("categories");

@Override
public void map(Map<String, Object> document, Emitter emitter) {

HashMap<String, String> books= (HashMap<String, String>) categories
.get("books");

Object createdAt = books.get("name");
if (createdAt != null) {
emitter.emit(createdAt.toString(), document);
}
}
}, "1.0");

//In Query part
Query q = v.createQuery();
QueryEnumerator rowEnum = q.run();
for (Iterator<QueryRow> it = rowEnum; it.hasNext();) {
QueryRow row = it.next();
     //BY USING Getkey method we can get name field
Book b = new Book(row.getKey()));
     //or else we can do like this also
HashMap<String, HashMap<String, String>> responsibleHaspMap = 
(HashMap<String, HashMap<String, String>>) document
.getCurrentRevision().getProperty(
"categories");
responsibleHaspMap
.get("books").get("name"));
}

On Tuesday, April 8, 2014 7:29:31 PM UTC+5:30, Mart-Indrek Süld wrote:
>
> I'm developing Couchbase Lite on Android and I have a database, what is 
> initialized according to JSON data file, what looks like this:
> {
>     "categories": [
>         {
>             "name": "Financial",
>             "books": [
>                 {
>                     "name": "Rich dad poor dad"
>                 },
>                 {
>                     "name": "How to stay rich"
>                 }
>             ]
>         },
>         {
>             "name": "Science",
>             "books": [
>                 {
>                     "name": "Superman"
>                 },
>                 {
>                     "name": "Green hornet"
>                 }
>             ]
>         }
>     ]
> }
>
> How can I receive the "books"-array and gain access to "name"-value for 
> certain category?
>
> I separated all the categories in a database to a separate Documents and 
> gave them ID according to category name(Is it reasonable to separate them 
> or it doesn't make any difference?).
> For example, if i want to get access to "financial" category i type:
> Document d = database.getExistingDocument("financial");
> and everything works fine. 
>
> If i want to get all the categories i type:
> List<Category> list = new ArrayList<Category>();
> Database db = manager.getExistingDatabase(DATABASE_NAME);
> Query query = db.createAllDocumentsQuery();
> QueryEnumerator rowEnum = query.run();
> for (Iterator<QueryRow> it = rowEnum; it.hasNext();) {
>    QueryRow row = it.next();
>    Document d = db.getExistingDocument(row.getDocumentId());
>    list.add(new Category((String) d.getProperty("name")));
> }
>
> But how can i get access to "books"-array?
> So far this is what i've come up with (Read APIs and GrocerySync example):
> Document d = db.getExistingDocument(categoryID);
> com.couchbase.lite.View viewItemsByDate = db.getView("booksForCategory");
> viewItemsByDate.setMap(new Mapper() {
> @Override
> public void map(Map<String, Object> document, Emitter emitter) {
> Object createdAt = document.get("books");
> if (createdAt != null) {
> emitter.emit(createdAt.toString(), document);
> }
> }
> }, "1.0");
> com.couchbase.lite.View v = db.getView("booksForCategory");
> Query q = v.createQuery();
> QueryEnumerator rowEnum = q.run();
> for (Iterator<QueryRow> it = rowEnum; it.hasNext();) {
> QueryRow row = it.next();
> Book b = new Book(row.getProperty("name"));//???
> }
> But in my oppinion, it doesen't work correctly and this is not the way to 
> do it. It returns wrong results and i'm pretty sure this is not how it 
> should be done. 
>
> (Oh, Do i define "getView("booksForCategory")" once in the constructor of 
> the DAO or every single time?)
>
> Could anyone help me and show me how it's done properly? How to properly 
> get the array of data from the Document so i can get access to properties 
> using Key's?
>
> Thanks in advance!
>
>

-- 
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/ca45aead-3dd6-4ac2-bcee-b0446aff2d71%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to