带有$或的mongoose中的复杂多个查询

时间:2015-03-04 10:59:45

标签: javascript node.js mongodb mongoose mongodb-query

我正在尝试找到一种方法,让自己成为使用多个复杂查询的干净代码。

我在MongoDB中有2个文档。 第一个是追随者,第二个是事件。

第一个查询:获取特定用户的所有关注者。 第二个查询:获取所有关注者的所有事件,并按日期对其进行排序。

我不知道如何进行第二次查询。

也许是这样的:

Event.find({ "$or" : [
                        {
                            'userId': followers[0].id,
                        },
                        {
                            'userId': followers[1].id,
                        },
                        {
                            'userId': followers[2].id,
                        },
                        ]});

但这对我来说并不是一个非常干净的代码。

1 个答案:

答案 0 :(得分:5)

我认为您需要的是$in运营商。 $in运算符只接受一个索引,而$or运算符占用更多(每个子句一个)。 documentation也明确指出:

  

当使用$或者使用它时,是对...的等式检查   相同字段的值,使用$ in运算符而不是$或   操作

您可以按如下方式修改查询:

var userIds = [followers[0].id, followers[1].id, followers[2].id]; 
Event.find({ 'userId': { $in: userIds } }, function(err, result){ ... });

或者正如Neil Lunn所说,另一种解决方法是使用本机地图方法生成所需用户ID的数组:

Event.find({
     "userId": {
          "$in": followers.map(function (follower){
               return follower.id
           }))
     }
}, function(err, result){ ... });