RethinkDB,Efficently限制结果按字段

时间:2016-09-07 18:49:52

标签: rethinkdb reql

我试图限制每个user_id字段的结果。

例如,我有一个用户ID列表,我希望从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 个答案:

答案 0 :(得分:1)

虽然有效,但会很慢。如果您在user_id字段上创建索引,则可以将filter替换为r.table('friends').getAll(userId, {index: 'user_id'}),这将更快。