2016-09-07 4 views
0

各フィールドの結果を制限しようとしています。user_idフィールド。例えばRethinkDB、効率的に結果をフィールドで制限します。

、私は、ユーザーのIdsのリストを持っていると私はfriends選択セットからユーザーごと2 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フィールドにインデックスを作成すると、filterr.table('friends').getAll(userId, {index: 'user_id'})に置き換えることができます。これははるかに高速です。

関連する問題