我想使用我的数组字段第0个值来使用Mongo aggregate $ lookup查询在销售文档中查找匹配项 . 这是我的查询:
db.products.aggregate([
{
$match : { _id:ObjectId("57c6957fb190ecc02e8b456b") }
},
{
$lookup : {
from : 'sale',
localField: 'categories.0',
foreignField: 'saleCategoryId',
as : 'pcSales'
}
}]);
结果:
{
"_id" : ObjectId("57c6957fb190ecc02e8b456b"),
"categories" : [
"57c54f0db190ec430d8b4571"
],
"pcSales" : [
{
"_id" : ObjectId("57c7df5f30fb6eacb3810d1b"),
"Title" : "Latest Arrivals",
}
]}
此查询将返回一个匹配,但当我检查它不匹配 . 我不知道为什么会发生这种情况,当我从查询中删除第0部分时它返回空白数组 . 像这样:
{
"_id" : ObjectId("57c6957fb190ecc02e8b456b"),
"categories" : [
"57c54f0db190ec430d8b4571"
],
"pcSales" : []
}
saleCategoryId也是一个包含categoriesKey数组的数组字段 .
请帮忙 .
1 回答
因为
localField
是一个数组,所以在查找之前需要在管道中添加 $unwind 阶段,或者在 $project 管道步骤中使用 $arrayElemAt 来获取数组中的实际元素 .以下是两个示例,一个使用 $arrayElemAt 运算符:
在应用 $lookup 管道之前,首先使用 $unwind 展平类别数组: