2015-12-01 3 views
1

Rethinkdb Документах этот пример, чтобы улучшить GETALL/содержит запросы с вторичным индексом:Как использовать вторичные индексы для «содержит» запрос

// Create the index 
r.table("users").indexCreate("userEquipment", function(user) { 
    return user("equipment").map(function(equipment) { 
     return [ user("id"), equipment ]; 
    }); 
}, {multi: true}).run(conn, callback); 

// Query equivalent to: 
// r.table("users").getAll(1).filter(function (user) { 
//  return user("equipment").contains("tent"); 
// }); 
r.table("users").getAll([1, "tent"], {index: "userEquipment"}).distinct().run(conn, callback); 

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

r.table("users").getAll(1).filter(function (user) { 
    return user("equipment").contains("tent", "tent2"); 
}); 

ответ

1

Вероятно, мы можем сделать это

r.table("users").getAll([1, "tent"]).filter(function (user) { 
    return user("equipment").contains("tent2"); 
}); 

Так построить мульти индекса, как вы делали, и попытаться getAll первым, так что часть является эффективной с индексом, а затем filter продолжать гарантировать, что equipment содержит массив, который мы хотим.

Смежные вопросы