Почему Contains in .Filter(func()) не работает в gorethink, а части запроса игнорируются?

Я пытаюсь сделать это:

r.table(table).filter(
  function (doc) {
    return r.expr(array)
            .contains(doc("name"));
  }
)

написано на Голанге это

rethink.Table(table).GetAllByIndex(index, value).Filter(func(row rethink.Term) interface {}{

    return rethink.Expr([]string{}).Contains(row.Field("type"))
})

Я не уверен, но это похоже на переосмысление.Expr игнорируется. Это первая проблема.

Вторая проблема следующая. Если у меня есть запрос, написанный следующим образом:

query := rethink.Table(table).GetAllByIndex(index, value)

а затем попробуйте сделать следующее:

if some_condition {
   q.Filter(some_filter)
}

if some_other_condition {
   q.Filter(some_other_filter)
}

когда я распечатаю q.String() я получил только эту первую часть, а все остальное игнорируется rethink.Table(table).GetAllByIndex(index, value)

1 ответ

Решение

Так как метод Filter возвращает новый термин, который будет содержать выражение предыдущего термина, необходимо повторно передать результат обратно в q,

if some_condition {
   q = q.Filter(some_filter)
}

if some_other_condition {
   q = q.Filter(some_other_filter)
}
Другие вопросы по тегам