从 Node.js 中的字符串执行 MongoDB 聚合管道:将字符串转换为 BSONDocument[]

问题描述 投票:0回答:1

Stack Overflow 社区!

我目前正在开发一个与 MongoDB 数据库交互的 Node.js 应用程序。我的应用程序需要执行作为字符串存储在数据库中的 MongoDB 聚合管道。这些管道非常复杂,包括各种聚合阶段,例如 $match、$group,甚至用于自定义 JavaScript 操作的 $function。

这是我正在处理的工作流程:

聚合管道是预定义的并作为字符串存储在 MongoDB 中。例如,管道在检索时可能如下所示(为了清晰起见进行了简化):

"[{ \"$match\": { \"status\": \"active\" } }, { \"$group\": { \"_id\": \"$category\", \"total\": { \"$sum\": 1 } } }]"

我的 Node.js 应用程序从数据库中检索这些字符串。

我需要针对它们各自的集合执行这些管道。

我面临的挑战是将聚合管道的这些字符串表示形式转换为 MongoDB 的 Node.js 驱动程序可以执行的格式。我意识到潜在的安全隐患,并正在寻找一种安全有效的方法来实现这一目标。

我研究过手动将字符串解析为 JSON 并处理特殊的 MongoDB 类型(ObjectId、$date、$function 中的自定义 JavaScript 函数等),但这种方法似乎很麻烦且容易出错,特别是对于更复杂的管道。

是否有处理这种情况的既定方法或最佳实践?如何安全有效地将这些存储的字符串表示形式转换为 Node.js 中可执行的聚合管道?

任何建议或指示将不胜感激。预先感谢您的帮助!

node.js mongodb aggregation-framework bson
1个回答
0
投票

应该简单地就像

db.getCollection("collection").aggregate(JSON.parse("[{ \"$match\": { \"status\": \"active\" } }, { \"$group\": { \"_id\": \"$category\", \"total\": { \"$sum\": 1 } } }]"))

是的,“NoSQL 注入”将是一个严肃的话题。也许在 MongoDB 中存储 JSON 对象比字符串更好。

© www.soinside.com 2019 - 2024. All rights reserved.