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



我正在使用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"
}}
)

输出显示 Car 属性将是具有一个对象的汽车数组......

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

可以只得到一个对象而不是数组吗?

另一个关于参考文献的问题。许多不同的用户可以得到同一辆汽车。在没有SQL数据库中引用对象ID是件好事,或者最好在User集合中创建所有汽车字段?因为我必须更新所有不同的数据。例如,如果 Car 上发生了更改,我认为只更新 Car 集合中的一个文档比更新用户集合中的 50 行更容易。

你认为我是对的吗?

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

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

最新更新