MongoDb - 一次调用中来自外键 Table 的数据
MongoDb - Data from Foreign Key Table in One Call
假设我在 MongoDb 中有两个集合:
- 项目(int64 id,字符串描述,int64(Sheves FK)homeShelf)
- 和 Shelves(int64 id,字符串描述)
我是否有可能在一次调用中获取物品文档的同时获取物品的货架描述?最好通过 C# 驱动程序。
我猜答案是否定的,但由于 Entity Framework 之类的东西具有功能,我想我会问。
如果您使用的是 MongoDB 3.2+,则可以对聚合使用 $lookup 运算符。
项
{
"_id" : NumberLong(1),
"description" : "Item Description",
"homeShelf" : NumberLong(1000)
}
货架
{
"_id" : NumberLong(1000),
"Description" : "Shelf Description"
}
聚合查询
db.Items.aggregate(
[
{
$lookup: {
"from" : "Shelves",
"localField" : "homeShelf",
"foreignField" : "_id",
"as" : "Shelves"
}
}
]
);
结果
{
"_id" : NumberLong(1),
"description" : "Item Description",
"homeShelf" : NumberLong(1000),
"Shelves" : [
{
"_id" : NumberLong(1000),
"Description" : "Shelf Description"
}
]
}
您可以在 C# 驱动程序中使用以下代码。根据需要添加比赛和项目阶段:
var items = itemsCollection.Aggregate()
.Lookup("Shelves", "homeShelf", "_id", "Shelves").ToList();
假设我在 MongoDb 中有两个集合:
- 项目(int64 id,字符串描述,int64(Sheves FK)homeShelf)
- 和 Shelves(int64 id,字符串描述)
我是否有可能在一次调用中获取物品文档的同时获取物品的货架描述?最好通过 C# 驱动程序。
我猜答案是否定的,但由于 Entity Framework 之类的东西具有功能,我想我会问。
如果您使用的是 MongoDB 3.2+,则可以对聚合使用 $lookup 运算符。
项
{
"_id" : NumberLong(1),
"description" : "Item Description",
"homeShelf" : NumberLong(1000)
}
货架
{
"_id" : NumberLong(1000),
"Description" : "Shelf Description"
}
聚合查询
db.Items.aggregate(
[
{
$lookup: {
"from" : "Shelves",
"localField" : "homeShelf",
"foreignField" : "_id",
"as" : "Shelves"
}
}
]
);
结果
{
"_id" : NumberLong(1),
"description" : "Item Description",
"homeShelf" : NumberLong(1000),
"Shelves" : [
{
"_id" : NumberLong(1000),
"Description" : "Shelf Description"
}
]
}
您可以在 C# 驱动程序中使用以下代码。根据需要添加比赛和项目阶段:
var items = itemsCollection.Aggregate()
.Lookup("Shelves", "homeShelf", "_id", "Shelves").ToList();