从对象数组聚合输出特定结果 - MongoDB
Output a specific result from array of objects aggregation - MongoDB
我的数据如下所示:
{
"_id": ObjectId("620ca4e292a990273446cf7b"),
"data": [
{
"flagging": "BUSINESS",
"information": [
{
"room": 1,
"status": "AVAILABLE"
},
{
"room": 2,
"status": "BUSY"
}
]
},
{
"flagging": "PRIVATE",
"information": [
{
"room": 1,
"status": "AVAILABLE"
},
{
"room": 2,
"status": "CLEANING"
}
]
},
{
"flagging": "PUBLIC",
"information": [
{
"room": 1,
"status": "SERVICE"
},
{
"room": 2,
"status": "AVAILABLE"
}
]
}
],
"createdAt": "2022-02-16T07:16:50.674Z"
}
我正在尝试做一个服务,是否用户可以输入某个标记,结果会显示具有相应标记的数据。我尝试使用下面的代码,但我得到的是所有数据,而不是过滤后的数据。
db.coll.aggregate([
{
$match: { _id: ObjectId("620ca4e292a990273446cf7b") },
},
{
$project: { _id: 0, "data": 1 }
}
])
我应该在代码中更改什么才能得到以下结果(如果请求的标记是 BUSINESS 和 PUBLIC)?
{
"data": [
{
"flagging": "BUSINESS",
"information": [
{
"room": 1,
"status": "AVAILABLE"
},
{
"room": 2,
"status": "BUSY"
}
]
},
{
"flagging": "PUBLIC",
"information": [
{
"room": 1,
"status": "SERVICE"
},
{
"room": 2,
"status": "AVAILABLE"
}
]
}
]
}
感谢您的帮助
您需要 $filter
在 $project
阶段过滤 data
数组中的嵌套文档,其中 flagging
在 ["BUSINESS", "PUBLIC"]
内。
{
$project: {
_id: 0,
data: {
"$filter": {
"input": "$data",
"cond": {
$in: [
"$$this.flagging",
[
"BUSINESS",
"PUBLIC"
]
]
}
}
}
}
}
我的数据如下所示:
{
"_id": ObjectId("620ca4e292a990273446cf7b"),
"data": [
{
"flagging": "BUSINESS",
"information": [
{
"room": 1,
"status": "AVAILABLE"
},
{
"room": 2,
"status": "BUSY"
}
]
},
{
"flagging": "PRIVATE",
"information": [
{
"room": 1,
"status": "AVAILABLE"
},
{
"room": 2,
"status": "CLEANING"
}
]
},
{
"flagging": "PUBLIC",
"information": [
{
"room": 1,
"status": "SERVICE"
},
{
"room": 2,
"status": "AVAILABLE"
}
]
}
],
"createdAt": "2022-02-16T07:16:50.674Z"
}
我正在尝试做一个服务,是否用户可以输入某个标记,结果会显示具有相应标记的数据。我尝试使用下面的代码,但我得到的是所有数据,而不是过滤后的数据。
db.coll.aggregate([
{
$match: { _id: ObjectId("620ca4e292a990273446cf7b") },
},
{
$project: { _id: 0, "data": 1 }
}
])
我应该在代码中更改什么才能得到以下结果(如果请求的标记是 BUSINESS 和 PUBLIC)?
{
"data": [
{
"flagging": "BUSINESS",
"information": [
{
"room": 1,
"status": "AVAILABLE"
},
{
"room": 2,
"status": "BUSY"
}
]
},
{
"flagging": "PUBLIC",
"information": [
{
"room": 1,
"status": "SERVICE"
},
{
"room": 2,
"status": "AVAILABLE"
}
]
}
]
}
感谢您的帮助
您需要 $filter
在 $project
阶段过滤 data
数组中的嵌套文档,其中 flagging
在 ["BUSINESS", "PUBLIC"]
内。
{
$project: {
_id: 0,
data: {
"$filter": {
"input": "$data",
"cond": {
$in: [
"$$this.flagging",
[
"BUSINESS",
"PUBLIC"
]
]
}
}
}
}
}