gpt4 book ai didi

mongodb - 在 mongo 聚合 $lookup 查询中使用数组第一个字段来匹配文档

转载 作者:可可西里 更新时间:2023-11-01 09:26:04 26 4
gpt4 key购买 nike

我想使用我的数组字段第 0 个值使用 Mongo 聚合 $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数组的数组字段。

请帮忙。

最佳答案

因为您的 localField 是一个数组,您需要在查找之前向您的管道添加一个 $unwind 阶段或使用 $arrayElemAt $project 管道步骤中获取数组中的实际元素。

这里有两个例子,一个使用了 $arrayElemAt 运算符:

db.products.aggregate([ 
{ "$match" : { "_id": ObjectId("57c6957fb190ecc02e8b456b") } },
{
"$project": {
"category": { "$arrayElemAt": [ "$categories", 0 ] }
}
},
{
"$lookup": {
from : 'sale',
localField: 'category',
foreignField: 'saleCategoryId',
as : 'pcSales'
}
}
]);

这在应用 $unwind 管道之前首先使用 $lookup 展平类别数组:

db.products.aggregate([ 
{ "$match" : { "_id": ObjectId("57c6957fb190ecc02e8b456b") } },
{ "$unwind": "$categories" },
{
"$lookup": {
from : 'sale',
localField: 'categories',
foreignField: 'saleCategoryId',
as : 'pcSales'
}
}
]);

关于mongodb - 在 mongo 聚合 $lookup 查询中使用数组第一个字段来匹配文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39268099/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com