Mongodb 在mongo脚本中的映射内添加条件
此代码运行良好。我加入了两个不同的文档,但industryCategoryMapping有一个对象IndustryCategory数组。我想在对象数组中添加条件Mongodb 在mongo脚本中的映射内添加条件,mongodb,aggregation-framework,aggregate,Mongodb,Aggregation Framework,Aggregate,此代码运行良好。我加入了两个不同的文档,但industryCategoryMapping有一个对象IndustryCategory数组。我想在对象数组中添加条件 db.brand.aggregate([ { $lookup: { from: "industryCategoryMapping", as: 'Category', let: { entityId: { $toString : '$_id' }},
db.brand.aggregate([
{ $lookup:
{
from: "industryCategoryMapping",
as: 'Category',
let: { entityId: { $toString : '$_id' }},
pipeline: [
{
$match: {
$expr: {
$and: [
{ $eq: ['$type', 'BRAND'] },
{ $eq: ['$$entityId', '$entityId'] },
]
}
}
}
]
}
}, {
$project: {
name: 1, industryCategoryMapping: {
$map:
{
input: "$Category",
as: "each",
in: '$$each.industryCategories'
}
}
}
},
])
并返回结果
"_id" : ObjectId("5dfb18a6dfb32f87deeffa13"),
"name" : "Gatorade",
"industryCategoryMapping" : [
[
{
"_id" : ObjectId("5dd26e6e34d10718f843caa9"),
"isDefault" : true,
"industryCategory" : {
"_id" : ObjectId("5def644605ea8b5a7c97b48c"),
"industryCategory" : {
"_id" : ObjectId("5def644605ea8b5a7c97b48f")
}
}
},
{
"_id" : ObjectId("5dfb1514dfb32f87deeff97f"),
"isDefault" : false,
"industryCategory" : {
"_id" : ObjectId("5df8990c4d9c000b9c87592a"),
"industryCategory" : {
"_id" : ObjectId("5df8990c4d9c000b9c87592b")
}
}
}
]
]
}
但在给定的Json结果中,industryCategoryMapping数组有2个对象,我只需要isDefault:true类型对象。有人能帮我忽略isDefault:给定数组中的false对象吗。我想你应该使用
$filter
而不是$map
。运算符允许您指定一个条件。@prasad\您的意思是说$filter:{input:$Category',as:“each”,cond:{$eq:[“$$each.industryCategories.isDefault”,'true']}如果没有引号,它就不能工作;这是一个布尔值。在查找阶段之后,文档结构是什么样子的。您能否仅通过查找运行查询。@srinivasy,@prasad感谢您的快速回复。事实上,后来我在json中发现了问题。所以我做了放松手术,在那之后,它就像预期的那样工作。如果您观察到行业类别映射[[有两个大括号,表示reson筛选器不工作。