MongoDB查找获取引用的对象ID和建议以供参考

时间:2018-08-28 15:43:33

标签: python mongodb aggregation-framework pymongo

我正在使用PyMongo和MongoDB 4.0.1。对于该示例,我将其集合称为“用户”和“汽车”。因此我的用户只能获得一辆汽车(一对一关系)

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"
   }}
)

输出向我显示汽车属性将是具有一个对象的一系列汽车...

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

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

关于引用的另一个问题。许多不同的用户可以得到同一辆车。在No SQL数据库中最好引用对象ID,或者最好在User集合中创建所有car字段?因为我必须更新所有不同的数据。例如,如果对Car进行更改,我认为仅更新Car集合中的一个文档要比更新用户集合中的50行更容易。

您认为我是对的吗?

1 个答案:

答案 0 :(得分:1)

$unwind阶段之后,您需要使用$lookup

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