2016-09-07 4 views
0

Я пытаюсь ограничить результаты для каждого поля user_id.RethinkDB, эффективно ограничивает результаты по полю

К примеру, у меня есть список пользователей IdS и я хочу, чтобы ограничить 2 friends каждого пользователя из множества friends выбора.

Таблица: пользователи

{ 
    name: String, 
    surname: String 
} 

Таблица: друзей

{ 
    user_id: ObjectId // refer to user 
    friend_id: ObjectId // refer to user 
} 

Запрос

Ближайший запрос я мог бы написать для достижения этой цели заключается в следующем:

var userIds = [1,2]; 

r.map(userIds, function(userId) { 
    return r.table('friends').filter(function(friend) { 
     return userId.eq(friend('user_id')); 
    }).limit(2).coerceTo('array'); 
}); 

результате которых:

[ 
[ 
    { 
    user_id: 1, 
    friend_id: 2 
    }, 
    { 
    user_id: 1, 
    friend_id: 3 
    }, 
    ], 

    [ 
    { 
    user_id: 2, 
    friend_id: 3 
    }, 
    { 
    user_id: 2, 
    friend_id: 4 
    }, 
    ] 
] 

я использую правильный подход?

ответ

1

Это работает, но будет медленным. Если вы создадите индекс в поле user_id, вы можете заменить filter на r.table('friends').getAll(userId, {index: 'user_id'}), который будет намного быстрее.

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