【问题标题】:$lookup is not working showing non relevent record in mongodb$lookup 无法在 mongodb 中显示非相关记录
【发布时间】:2019-05-26 19:20:08
【问题描述】:

我正在尝试将 $lookup 用于两个表,但在查找后我也得到了不相关的记录。

表用户

{"_id" : ObjectId("5c1f5fe31e11011268006aa7"),"name" : "v","email" : "v@gmail.com"},
{"_id" : ObjectId("5c1f5fd31e11011268006aa6"),"name" : "r","email" : "r@gmail.com",}

订桌

schema like 
(student_id: { type: Schema.Types.ObjectId, ref: 'users' },
teacher_id: { type: Schema.Types.ObjectId, ref: 'users' })

{
    "_id" : ObjectId("5c1f642aa6fb4511a0511e41"),
    "student_id" : ObjectId("5c1f5fd31e11011268006aa7"),
    "createdAt" : ISODate("2018-12-23T16:02:10.179+05:30"),
    "updatedAt" : ISODate("2018-12-23T16:02:10.179+05:30"),
    "__v" : 0,
}

$lookup

db.bookings.aggregate(
   {
     $lookup:
       {
         from: "users",
         localField: "ObjectId(student_id)",
         foreignField: "ObjectId(_id)",
         as: "student_info"
       }
  }
)

结果我得到了两个用户

{
    "_id": "5c1f642aa6fb4511a0511e41",
    "student_id": "5c1f5fd31e11011268006aa7",
    "teacher_id": "5c1f5fe31e11011268006aa6",
    "createdAt": "2018-12-23T10:32:10.179Z",
    "updatedAt": "2018-12-23T10:32:10.179Z",
    "__v": 0,
    "student": [
        {
            "_id": "5c1f5fd31e11011268006aa6",
            "name": "r",
            "email": "a@gmail.com"
        },
        {
            "_id": "5c1f5fe31e11011268006aa7",
            "name": "v",
            "email": "v@gmail.com"
        }
    ]
}

但是如果我使用 localField: "student_id", ForeignField: "_id",在查找中我得到的是空白的 student_info 数组

【问题讨论】:

    标签: mongodb mongodb-query aggregation-framework


    【解决方案1】:

    您的localFieldforeignField 是文档本身的字段。 您使用的 ("ObjectId(student_id)") 只是一个字符串,并且在文档中不存在任何具有该名称的字段。

    db.bookings.aggregate(
       {
         $lookup:
           {
             from: "users",
             localField: "student_id",
             foreignField: "_id",
             as: "student_info"
           }
      }
    )
    

    【讨论】:

    • 在我使用这个但得到空白数组之前,我更新了有问题的预订模式,请看一下
    • 我可以看到您的student_id 与您的示例文档中的任何_id 都不匹配。是这个问题吗?
    • 你是对的 .. 那是我的错误 .. 标记你的答案是正确的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    相关资源
    最近更新 更多