使用 ObjectId 的 mongodb 聚合查找

Jay*_*Jay 0 mongodb mongodb-query aggregation-framework

我正在为 mongodb 中的基本查找而苦苦挣扎。尝试多种组合后,我无法弄清楚出了什么问题。我看到有很多关于 SO 解决它的问题,但在尝试所有答案后没有任何效果。

这是我的用户集合

在此处输入图片说明

这是我的物品收藏

在此处输入图片说明

每个项目都有一个所有者,它映射到用户集合中用户的 _id。对于我的查询,我试图通过相应的用户获取项目。这是查询

   db.items.aggregate([
    {
        "$lookup" : {
          localField : "owner",
          from : "users",
          foreignField : "_id",
          as : "users"
        }
    }
])
Run Code Online (Sandbox Code Playgroud)

它返回这个 -

在此处输入图片说明

我尝试了不同的变化 - 例如

db.items.aggregate([
    {
        "$lookup" : {
          localField : "owner.str",
          from : "users",
          foreignField : "_id.str",
          as : "users"
        }
    }
])
Run Code Online (Sandbox Code Playgroud)

这导致用户数组填充不正确(所有用户!)。

在此处输入图片说明

我究竟做错了什么?

编辑

这是项目集合

{
  "_id": {
    "$oid": "5b268395c176db1548bd92c2"
  },
  "title": "Item #1",
  "description": "Item 1 Description",
  "categories": [
    {
      "$ref": "categories",
      "$id": {
        "$oid": "5b268248c176db1548bd92af"
      }
    }
  ],
  "status": "borrowed",
  "image": "http://cdn.site.com/testimage.png",
  "borrower": "5b2684a0c176db1548bd92d5",
  "owner": {
    "$ref": "users",
    "$id": {
      "$oid": "5aecc8012d3d947ba130800d"
    }
  }
}

{
  "_id": {
    "$oid": "5b2c2c4d3c70af2da07d1266"
  },
  "title": "Item 2",
  "description": "Item 2 Description",
  "categories": [
    {
      "$ref": "categories",
      "$id": {
        "$oid": "5b268248c176db1548bd92af"
      }
    }
  ],
  "status": "Available",
  "image": "http://cdn.site.com/testimage1.png",
  "borrower": null,
  "owner": {
    "$ref": "users",
    "$id": {
      "$oid": "5b2684a0c176db1548bd92d5"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这是用户集合:

{
  "_id": {
    "$oid": "5aecc8012d3d947ba130800d"
  },
  "email": "n.y@gmail.com",
  "registeredOn": "20/10/2018 12:12:29 AM",
  "avatarURL": "http://gravtar.com/12334",
  "friends": []
}

{
  "_id": {
    "$oid": "5b2684a0c176db1548bd92d5"
  },
  "email": "j.v@gmail.com",
  "registeredOn": "20/10/2018 12:12:29 AM",
  "avatarURL": "http://gravtar.com/12334",
  "friends": [],
  "wishlist": [
    {
      "$ref": "items",
      "$id": {
        "$oid": "5b2831543c70af2da07d11da"
      }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*lex 5

localFieldforeignField应该是相同的数据类型。你分别是DBRefObjectId

  • 谢谢你,你救了我的头发..拉我的头发再多两天,我就会秃顶! (2认同)