localField不是exsist时的mongodb $查找行为

时间:2018-02-14 10:48:05

标签: mongodb

我需要帮助才能理解。

我有这个问题:

db.getCollection('logs').aggregate([{ 
   $match: { 
      $or: [
        { user : 1 },
        { user: 2 }
      ] 
}}, { 
    "$lookup": { 
        "from": 'users', 
        "localField": 'user', 
        "foreignField": 'user_id', 
        "as": 'user_data' 
    } 
}, { 
    "$lookup": { 
        "from": 'roll', 
        "localField": 'user_rol', 
        "foreignField": 'user_id', 
        "as": 'roll' 
    } 
}, { 
     $skip: 0 
}]);

我有3个收藏品,

logs
roll
users

现在,我有两种日志

用户日志

{
"type" : "user_log",
"user" : 1
}

滚动日志

{
"type" : "roll_log",
"user" : 1,
"user_rol" : 1
}

当我查询一切正常时。

我需要了解我是否在$lookup上执行第二次user_log,是否会尝试查找该文档,因为localField上不存在user_log文档。

感谢。

1 个答案:

答案 0 :(得分:0)

来自docs

  

如果输入文档不包含localField,则为$ lookup   为了匹配目的,将字段视为null值。

因此输出将包含空数组。在你的情况下,roll将是空数组。