我遇到问题了。问题是,我有多个集合,每个集合都有维度字段,其中包含不同维度的对象数组。该系列如下所示。
现在我只需要通过 slug 返回数组中的特定对象,id 可以来自多个文档。
我一直在使用下面的查询进行过滤,但它返回给我整个文档。这是我的查询
db.dimensions.find({
"dimension.dimensionChildSlug": { $in: ["spring", "formal"] }
}).select({ dimension: 1 })
但是预期的结果应该是这样的,只有数组中与 slug 匹配的项目才会被检索。
[
{
"isDeleted": false,
"isArchived": false,
"_id": {
"$oid": "6423b71df226c91a55d756bb"
},
"dimensionChild": "Spring",
"dimensionChildToLower": "spring",
"dimensionChildSlug": "spring"
},
{
"isDeleted": false,
"isArchived": false,
"_id": {
"$oid": "6423cde4f4db0d397b22390b"
},
"dimensionChild": "Wedding",
"dimensionChildToLower": "wedding",
"dimensionChildSlug": "wedding"
}
]
请找收藏
[{
"_id": {
"$oid": "6423b6faf226c91a55d756b9"
},
"isDeleted": false,
"isArchived": false,
"dimensionType": "Collections",
"dimensionTypeSlug": "collections",
"dimensionTypeToLower": "collections",
"dimension": [
{
"isDeleted": false,
"isArchived": false,
"_id": {
"$oid": "6423b71df226c91a55d756bb"
},
"dimensionChild": "Spring",
"dimensionChildToLower": "spring",
"dimensionChildSlug": "spring"
},
{
"isDeleted": false,
"isArchived": false,
"_id": {
"$oid": "6423b723f226c91a55d756bc"
},
"dimensionChild": "Summer",
"dimensionChildToLower": "summer",
"dimensionChildSlug": "summer"
}
],
"createdAt": {
"$date": "2023-03-29T03:56:42.370Z"
},
"updatedAt": {
"$date": "2023-03-29T03:57:23.419Z"
},
"__v": 0
},{
"_id": {
"$oid": "6423cddbf4db0d397b22390a"
},
"isDeleted": false,
"isArchived": false,
"dimensionType": "Occassions",
"dimensionTypeSlug": "occassions",
"dimensionTypeToLower": "occassions",
"dimension": [
{
"isDeleted": false,
"isArchived": false,
"_id": {
"$oid": "6423cde4f4db0d397b22390b"
},
"dimensionChild": "Wedding",
"dimensionChildToLower": "wedding",
"dimensionChildSlug": "wedding"
},
{
"isDeleted": false,
"isArchived": false,
"_id": {
"$oid": "6423ce0af4db0d397b22390c"
},
"dimensionChild": "Business Casual",
"dimensionChildToLower": "business casual",
"dimensionChildSlug": "business-casual"
},
{
"isDeleted": false,
"isArchived": false,
"_id": {
"$oid": "6423ce18f4db0d397b22390d"
},
"dimensionChild": "Formal",
"dimensionChildToLower": "formal",
"dimensionChildSlug": "formal"
}
],
"createdAt": {
"$date": "2023-03-29T05:34:19.300Z"
},
"updatedAt": {
"$date": "2023-03-29T05:35:20.294Z"
},
"__v": 0
}]
谁能帮我解决这个问题。
谢谢。
我想你想用
$filter
:
db.collection.aggregate([
{$match: {
"dimension.dimensionChildSlug": {$in: ["spring", "formal"]}
}},
{$project: {
dimension: {$filter: {
input: "$dimension",
cond: {$in: ["$$this.dimensionChildSlug", ["spring", "formal"]]}
}}
}}
])