【问题标题】:Mongodb aggregate lookup by _id is not working_id 的 Mongodb 聚合查找不起作用
【发布时间】:2021-04-21 18:38:45
【问题描述】:

当 foreignField 为 _id 时,MongoDb 聚合查找未产生结果。 我有两个集合说usersdiscussions

样本users数据:

[{
    _id: 5f9c50dcfac1f091400225e3,
    email: 'Peter.Parker@gmail.com',
    details: { fname: 'Peter Test', lname: 'Fulton' },
},
{
    _id: 5fa432bfb91fab7db60c70eb,
    email: 'Spidy@xxx.com',
    details: { fname: 'Frodo', lname: 'Baggins' },
},
{
    _id: 5fa8ec7d3ce22610e5d15190,
    email: 'tommy@xxx.com',
    details: { fname: 'Tommy', lname: 'test' },
},
{
    _id: 5fc38bb0b3683651be970180,
    email: 'jerry@xxx.io',
},
{
    _id: 5fd2340cc443d155ab38383b,
    email: 'Dexter@xxx.io',
    details: { fname: 'Dexter', lname: 'Lab' },
}]

样本discussions数据:

 {_id: ObjectId("5fb2abd6b14fa5683979df58"),
  tags: [ 'javascritp', 'css', 'html' ],
  title: 'Why is this inline-block element pushed downward?',
  post: 'Test Post',
  learnerId: ObjectId("5f9c50dcfac1f091400225e3"),
 }

此处users 的“_id”与“discussions”的“learnerId”相关联。

我的聚合查询如下所示。

db.users.aggregate([
            { $project: { "details.fname": 1, "details.lname":1,email:1, _id:1}},
            {$lookup: {
                from: "discussions",
                localField: "learnerId",
                foreignField: "_id",
                as: "discussions"
            }}
        ])

这里'Peter Test' 与_id 5f9c50dcfac1f091400225e3 链接到discussions LeanerId。但我希望讨论会出现在我的结果中。我在所有用户集合中看到空讨论数组。

 [{
    _id: 5f9c50dcfac1f091400225e3,
    email: 'Peter.Parker@gmail.com',
    details: { fname: 'Peter Test', lname: 'Fulton' },
    discussions: []
},
{
    _id: 5fa432bfb91fab7db60c70eb,
    email: 'Spidy@xxx.com',
    details: { fname: 'Frodo', lname: 'Baggins' },
    discussions: []
},
{
    _id: 5fa8ec7d3ce22610e5d15190,
    email: 'tommy@xxx.com',
    details: { fname: 'Tommy', lname: 'test' },
    discussions: []
},
{
    _id: 5fc38bb0b3683651be970180,
    email: 'jerry@xxx.io',
    discussions: []
},
{
    _id: 5fd2340cc443d155ab38383b,
    email: 'Dexter@xxx.io',
    details: { fname: 'Dexter', lname: 'Lab' },
    discussions: []
}]

你能指出我的聚合查询有什么问题吗?

【问题讨论】:

  • 您的 id 类型不同,结果可能不匹配。
  • 你的 id 不匹配.. 工作 mongo playground mongoplayground.net/p/YDSJl1VU62S
  • 感谢您的回复。我误解了。感谢您的澄清。

标签: mongodb aggregate lookup


【解决方案1】:

你的localField和foreignField不匹配

db.users.aggregate([
  {
    $project: {
      "details.fname": 1,
      "details.lname": 1,
      email: 1,
      _id: 1
    }
  },
  {
    $lookup: {
      from: "discussions",
      localField: "_id",
      foreignField: "learnerId",
      as: "discussions"
    }
  }
])

工作Mongo playground

【讨论】:

    猜你喜欢
    • 2021-03-15
    • 2018-11-10
    • 1970-01-01
    • 2018-12-11
    • 2020-04-13
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    • 2020-12-25
    相关资源
    最近更新 更多