MongoDB 聚合查询中解析字符串为数组或文档
对于使用 MongoDB 的聚合查询 aggregate 时,如果数据库中的记录字符串是这样的格式:{info:'[{"name":"abcd"}]'},你可以按照以下步骤将其转换为 Array
-
首先,使用 MongoDB 的聚合查询 aggregate 方法查询到包含该记录的文档。假设你已经得到了一个名为 result 的聚合查询结果。
-
使用 MongoDB 的聚合操作符 $project 来对查询结果进行投影,将 info 字段解析为一个数组。示例代码如下:
result = result.aggregate(
[
{
$project: {
info: { $map: { input: { $split: ['$info', ''] }, as: 'char', in: '$$char' } }
}
}
]
)
在这个示例中,我们使用 $split 操作符将 info 字段的字符串拆分为一个字符数组。然后,使用 $map 操作符将该数组映射为一个新数组,其中的每个元素都是字符数组中的一个字符。最后,使用 $project 操作符将新数组赋值给 info 字段。
- 现在,你可以将 result 转换为 Array
或者 Document,具体取决于你的需求。如果你需要将 result 转换为 Array ,可以使用 MongoDB 的聚合操作符 $group 和 $push。示例代码如下:
result = result.aggregate(
[
{
$group: {
_id: null,
documents: { $push: '$$ROOT' }
}
},
{
$project: {
_id: 0,
documents: 1
}
}
]
)
在这个示例中,我们使用 $group 操作符将所有文档聚合为一个数组。然后,使用 $project 操作符删除 _id 字段,只保留 documents 字段。
- 如果你只需要将 result 转换为单个 Document,可以使用 MongoDB 的聚合操作符 $replaceRoot。示例代码如下:
result = result.aggregate(
[
{
$replaceRoot: {
newRoot: { $arrayElemAt: ['$documents', 0] }
}
}
]
)
在这个示例中,我们使用 $arrayElemAt 操作符取出 documents 数组的第一个元素,并将其作为新的根文档。
请注意,以上示例代码仅供参考,具体实现可能需要根据你的具体需求进行调整。
原文地址: https://www.cveoy.top/t/topic/p4pW 著作权归作者所有。请勿转载和采集!