mongodb - MongoDB聚合双重查找和管道
问题描述
$lookup
我在使用时遇到了第二个问题,pipeline
但是使用它可以正常工作。localField
foreignField
我的收藏如下:
FeedCategories:
{"_id":{"$oid":"1"},"name":"XXX1","status":"active"}
{"_id":{"$oid":"2"},"name":"XXX2","status":"active"}
Feeds:
{ "_id": { "$oid": "1" }, "category": { "$oid": "1" }, "status": "published" }
{ "_id": { "$oid": "2" }, "category": { "$oid": "1" }, "status": "published" }
{ "_id": { "$oid": "3" }, "category": { "$oid": "2" }, "status": "published" }
FeedCategoriesUser
{ "_id": { "$oid": "1" }, "Feed_left_id": { "$oid": "1" }, "User_right_id": { "$oid": "2" }}
{ "_id": { "$oid": "2" }, "Feed_left_id": { "$oid": "2" }, "User_right_id": { "$oid": "2" }}
我的猫鼬代码:
FeedCategoriesModel.aggregate([{
$lookup: {
from: 'feeds',
let: { categoryId: "$_id" },
pipeline: [
{ "$match": {
"$expr": { "$eq": [ "$category", "$$categoryId" ] },
"status": "published"
}}
],
as: 'feedsByCategory'
}
}, {
$lookup: {
from: 'feed_categories_user',
localField: 'feedsByCategory._id',
foreignField: 'Feed_left_id',
as: 'feedsByCategoryCompleted'
}
}]);
但是当我以这种方式使用管道时,我没有任何结果feedsByCategoryCompleted
:
FeedCategoriesModel.aggregate([{
$lookup: {
from: 'feeds',
let: { categoryId: "$_id" },
pipeline: [
{ "$match": {
"$expr": { "$eq": [ "$category", "$$categoryId" ] },
"status": "published"
}}
],
as: 'feedsByCategory'
}
}, {
$lookup: {
from: 'feed_categories_user',
let: {feedid: "$feedsByCategory._id"},
pipeline:[{
"$match":{
"$expr": { "$eq": [ "$Feed_left_id", "$$feedid" ] }
}
}],
as: 'feedsByCategoryUsed'
}
}])
如何在上面的示例中使用 piepeline 进行第二个 $lookup?
解决方案
在第二次查找中,您需要使用$in
insted of $eq
inside $match
。原因是,feedsByCategory
是第一次查找的数组,您将其分配_id
给feedid
. 所以它也是一个数组。当您检查数组内匹配项中的可能值时,您需要使用$in
{
$lookup: {
from: "FeedCategoriesUser",
let: {
feedid: "$feedsByCategory._id"
},
pipeline: [
{
"$match": {
"$expr": {
"$in": [
"$Feed_left_id",
"$$feedid"
]
}
}
}
],
as: "feedsByCategoryUsed"
}
}
工作Mongo游乐场
推荐阅读
- swift - 如何从 Firebase 获取图像并将其显示为图像视图?
- pinterest - Pinterest 分析和广告 API
- python - 数字识别,使用opencv
- libgdx - 如何使用 libGDX 中的 Hiero 工具显示德语变音符号(ä、ö、ü)?
- c# - C# 按键值对 JSON 进行分组
- amazon-cognito - AWS Cognito Saas 演示:如何“获取访问令牌(使用 IAM 策略)?”
- c# - 将特定数据库中的特定 SQL Server 表保存为 Excel 文件格式的自动化流程日常工作
- html - 我的 div 容器随着浏览器不断缩小
- c# - 在派生的泛型实例上调用静态扩展方法
- javascript - 如何从下表中删除一行?