【发布时间】: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