【问题标题】:MongoDB lookup get referenced object id and advice for referenceMongoDB 查找获取引用的对象 id 和建议以供参考
【发布时间】:2019-02-03 07:36:34
【问题描述】:

我正在使用 PyMongo 和 MongoDB 4.0.1。例如,我将调用我的集合 User 和 Car。所以我的用户只能得到一辆车(一对一的关系)

User
----
_id : ObjectId("2b2543b24713ea82ce3ae21f")
Firstname : John
Lastname : Doe
Car : ObjectId("5b854bb806a77a06ce321f1f")

Car
----
_id : ObjectId("5b854bb806a77a06ce321f1f")
Model : Tesla Motor

当我做这个查询时:

db.user.aggregate(
  {$unwind: "$car"},
  {$lookup: {
    from:"car",
    localField: "car",
    foreignField: "_id",
    as: "car"
   }}
)

输出显示 car 属性将是一组带有一个对象的汽车...

{ 
  "_id" : ObjectId("2b2543b24713ea82ce3ae21f"), 
  "firstname" : "John", 
  "lastname" : "Doe" , 
  "car" : [ { 
      "_id" : ObjectId("5b854bb806a77a06ce321f1f"), 
      "model" : "Tesla Motor"
   }] 
}

有可能只得到一个对象而不是数组?

关于引用的另一个问题。许多不同的用户可以得到同一辆车。在 No SQL 数据库中引用对象 id 比较好,还是最好在 User 集合中创建所有汽车字段?因为我必须更新所有不同的数据。例如,如果 Car 发生变化,我认为只更新 Car 集合中的一个文档比更新用户集合中的 50 行更容易。

你觉得我说的对吗?

【问题讨论】:

  • 你可以$unwindcar数组或者使用$arrayElemAt聚合
  • 但我使用的是 $unwind。我做错了吗?
  • 你在第一阶段使用它...在$lookup之后移动到第二阶段
  • 哦,很漂亮。为什么这个地方如此重要?
  • 好的,非常感谢你!

标签: python mongodb aggregation-framework pymongo


【解决方案1】:

你需要在$lookup阶段之后使用$unwind

db.user.aggregate([
  { "$lookup": {
    "from": "car",
    "localField": "car",
    "foreignField": "_id",
    "as": "car"
  }},
  { "$unwind": "$car" }
])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    • 2015-06-30
    • 2011-06-14
    • 2018-06-07
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多