0
У меня есть следующий запрос, который работает нормально, но это медленно, но я не могу понять, как индексировать его правильно:RethinkDB индекс запроса с несколькими .Contains()
r.db('my_db')
.table('messages')
.filter({ community_id : community.id})
.filter(function(row){
return row('mentions').contains(user.id);
})
.filter(function(row){
return row('channels').contains(channel.id);
})
.orderBy(r.desc('created_at'))
.skip(0)
.limit(50);
Я попытался с помощью следующего индекса (с использованием Thinky.js):
Model.ensureIndex("user_mentions", function(message){
return message("mentions").map(function(user_id){
return message("channels").map(function(channel_id){
return [
message("community_id"),
message("mentions").contains(user_id),
message("channels").contains(channel_id),
message('created_at')
];
});
});
}, {multi: true});
, а затем запросить его я попытался это:
r.db('my_db')
.table('messages')
.between(
[community.id, user.id, channel.id, r.minval],
[community.id, data.user.id, channel.id, r.maxval],
{ index : 'user_mentions' }
)
.orderBy({index:r.desc("user_mentions")})
.skip(0)
.limit(50);
сообщений, таблица ло oks как:
id | community_id | mentions (array of user_ids) | channels (array of channel_ids) | created_at
Но в итоге я получаю нулевые результаты. Я очень благодарен за любые предложения!
Так близко, так concatMap вместо карты, спасибо! – jesperado