ИЛИ запрос в переосмыслении

Можно ли выполнить поиск ИЛИ по значениям массива в Rethink.

Например: у меня есть таблица под названием «сообщение» с полем «теги», которое представляет собой массив. Я хочу выполнить поиск ИЛИ по значениям тегов.

post1 {
tags : ["young","agreesive"]
}

post2 {
tags : ["cricket","India"]
}

Дайте мне все сообщения, которые содержат теги «молодой» или «крикет», должны возвращаться как сообщения.


person user3783195    schedule 26.06.2015    source источник


Ответы (2)


Как сказал mlucy, вы можете использовать filter в сочетании с or и contains для получения всех документов с определенным тегом.

Если у вас есть массив тегов, вы также можете сделать следующее:

var tags = ["young", "cricket"];

r.table('posts').filter(function (row) {
  return r.expr(tags).contains(function (value) { 
    return row("tags").contains(value) 
  });
})

Его легче расширить, чем использовать or.

Мультииндекс

Вы также можете создать мультииндекс для этого свойства. Мультииндексы позволяют искать данные по любому из значений в массиве. Так, например:

r.table("posts").indexCreate("tags", {multi: true})
r.table("posts").getAll("young", "cricket", {index: "tags"})

Этот запрос получит все документы с тегами «молодой» и «крикет», и он более эффективен и чище, чем использование вложенного contains.

person Jorge Silva    schedule 26.06.2015
comment
Спасибо Хорхе :) Для массива тегов это идеально. - person user3783195; 29.06.2015

Вы можете сделать это с помощью or и contains:

r.table('posts').filter(function(row) {
  return row('tags').contains('young').or(row('tags').contains('cricket'));
})
person mlucy    schedule 26.06.2015