MongoDB $lookup 值返回数组
MongoDB $lookup Value Back into Array
我有一个包含多个项目的文档,需要从另一个集合中查找更多信息来填写数据。
主要文档:
{
_id: ObjectID("5a30ff41af58f911946b122e"),
SalesItems: [
{
SalesItemID: 1139,
Quantity: 2,
Amount: 3.00
},
{
SalesItemID: 2549,
Quantity: 1,
Amount: 5.40
}
]
}
然后是另一个名为 SalesItem 的集合,其中包含这些销售项目的详细信息。两个文档
{
_id: 1139,
Name: "Item #1",
Price: 1.50
}
{
_id: 2549,
Name: "Item #2",
Price: 5.40
}
我正在尝试在聚合中执行 $lookup 以将 SalesItem 集合中的信息提取到我的主要集合的 SalesItems 数组中。要获得如下所示的结果:
{
_id: ObjectID("5a30ff41af58f911946b122e"),
SalesItems: [
{
SalesItemID: 1139,
Quantity: 2,
Amount: 3.00,
SalesItemInfo: {
_id: 1139,
Name: "Item #1",
Price: 1.50
}
},
{
SalesItemID: 2549,
Quantity: 1,
Amount: 5.40,
SalesItemInfo: {
_id: 2549,
Name: "Item #2",
Price: 5.40
}
}
]
}
谁能告诉我这是否可行?
我尝试了以下方法,但结果中只有 SalesItemInfo 出现在 SalesItems 对象中。
aggregate([
{
$lookup: {
from: "SalesItem",
localField: "SalesItems.SalesItemID",
foreignField: "_id",
as: "SalesItems.SalesItemInfo"
}
}
])
SalesItem 集合已针对此示例进行了大量简化,在插入 Mongo 之前,它实际上是大约 990 行 JSON 文档。在主要 table 中,它将被复制大约 64,000 次,因此我试图避免将信息嵌入到主要文档中。
如有任何帮助,我们将不胜感激。
谢谢,丹尼尔。
在不同阶段摸索一番后设法解决了这个问题:
aggregate([
{
$unwind: "$SalesItems"
},
{
$lookup: {
from: "SalesItem",
localField: "SalesItems.SalesItemID",
foreignField: "ID",
as: "SalesItemDetails"
}
},
{
$group: {
_id: "$_id",
SalesItems: {
$push: {
SalesItemID: "$SalesItems.SalesItemID",
SalesItemDetails: "$SalesItemDetails"
}
}
}
}
])
这正是我要找的结果。
我有一个包含多个项目的文档,需要从另一个集合中查找更多信息来填写数据。
主要文档:
{
_id: ObjectID("5a30ff41af58f911946b122e"),
SalesItems: [
{
SalesItemID: 1139,
Quantity: 2,
Amount: 3.00
},
{
SalesItemID: 2549,
Quantity: 1,
Amount: 5.40
}
]
}
然后是另一个名为 SalesItem 的集合,其中包含这些销售项目的详细信息。两个文档
{
_id: 1139,
Name: "Item #1",
Price: 1.50
}
{
_id: 2549,
Name: "Item #2",
Price: 5.40
}
我正在尝试在聚合中执行 $lookup 以将 SalesItem 集合中的信息提取到我的主要集合的 SalesItems 数组中。要获得如下所示的结果:
{
_id: ObjectID("5a30ff41af58f911946b122e"),
SalesItems: [
{
SalesItemID: 1139,
Quantity: 2,
Amount: 3.00,
SalesItemInfo: {
_id: 1139,
Name: "Item #1",
Price: 1.50
}
},
{
SalesItemID: 2549,
Quantity: 1,
Amount: 5.40,
SalesItemInfo: {
_id: 2549,
Name: "Item #2",
Price: 5.40
}
}
]
}
谁能告诉我这是否可行?
我尝试了以下方法,但结果中只有 SalesItemInfo 出现在 SalesItems 对象中。
aggregate([
{
$lookup: {
from: "SalesItem",
localField: "SalesItems.SalesItemID",
foreignField: "_id",
as: "SalesItems.SalesItemInfo"
}
}
])
SalesItem 集合已针对此示例进行了大量简化,在插入 Mongo 之前,它实际上是大约 990 行 JSON 文档。在主要 table 中,它将被复制大约 64,000 次,因此我试图避免将信息嵌入到主要文档中。
如有任何帮助,我们将不胜感激。
谢谢,丹尼尔。
在不同阶段摸索一番后设法解决了这个问题:
aggregate([
{
$unwind: "$SalesItems"
},
{
$lookup: {
from: "SalesItem",
localField: "SalesItems.SalesItemID",
foreignField: "ID",
as: "SalesItemDetails"
}
},
{
$group: {
_id: "$_id",
SalesItems: {
$push: {
SalesItemID: "$SalesItems.SalesItemID",
SalesItemDetails: "$SalesItemDetails"
}
}
}
}
])
这正是我要找的结果。