Как обновить элемент во встроенном списке?

У меня есть josn с именем «обновление», и у него есть встроенный список «комментариев», например:

{
   id: "update/0",
    //comments contains elements with type:comment
    comments: [{
       id:"comment/0"
       content:"old first level comment content..."
       children:[{
                      id:"comment/00",
                      content:""old second level comment content...",
                      children[...]
                  }
                 ]

   }]
 }

Вопросы:

1, How to replace "old first level comment content..." with "new first level
   comment content..." by ids "update/0" and "comment/0"?

2, How to replace "old second level comment content..." with "new second level
   comment content..." by ids "update/0","comment/0" and "comment/00"?

person Alex Luya    schedule 27.02.2014    source источник


Ответы (1)


Сначала запросы, которые вы ищете:

r.table("update").get("update/0").update(function(doc) {
    return doc.merge({
        comments: doc("comments").map(function(comment) {
            return r.branch(
                comment("id").eq("comment/0"),
                comment.merge({
                    content: "new first level comment content..."
                }),
                comment
            )
        })
    })
}).run(...)

Второй:

r.table("update").get("update/0").update(function(doc) {
    return doc.merge({
        comments: doc("comments").map(function(comment) {
            return r.branch(
                comment("id").eq("comment/0"),
                comment.merge({
                    children: comment("children").map(function(child) {
                        return r.branch(
                            child("id").eq("comment/00"),
                            child.merge({
                                content: "new second level comment content..."
                            }),
                            child
                        )
                    })
                }),
                comment
            )
        })
    })
}).run(...)

Вероятно, вы захотите разделить свои данные на несколько таблиц для выполнения соединений. В вашем случае таблица "обновление" и таблица "комментарий". Ваш комментарий к таблице может присоединиться к детям.

Дополнительную информацию можно найти здесь:

Если у вас есть дополнительные вопросы, дайте мне знать.

person neumino    schedule 28.02.2014
comment
Спасибо, а как насчет того, чтобы я мог гарантировать: 1, большая часть обновлений фактически не будет иметь комментариев 2, для некоторых горячих/популярных обновлений количество комментариев будет относительно небольшим. - person Alex Luya; 01.03.2014
comment
В этом случае, я думаю, ваша текущая схема имеет смысл. - person neumino; 01.03.2014