我正在使用Node.js来托管WebApp,Mongoose充当了ORM。
当将数据插入某个集合中时,我会有一些钩子触发。
我希望在python脚本插入mongoDB实例时触发这些钩子。因此,如果我有一个pre save钩子,它将根据该钩子修改python脚本插入。
这可能吗?如果是这样,我该怎么办?
如果没有,请随时向我解释为什么这是不可能的和/或我为什么很愚蠢。
答案 0 :(得分:4)
这是不可能的,因为 python 和 nodejs 是 2 个不同的运行时 - 无法访问彼此内存的独立进程。
Mongoose 是一个 nodejs ORM——一个将 Javascript 对象映射到 Mongodb 文档并处理对数据库的查询的库。
所有 mongoose 钩子都属于 javascript 空间。在 Mongoose 向 mongo 发送任何请求之前,它们在 javascript 对象上执行。来自那里的 2 个结果:没有其他进程可以弄乱这些钩子,甚至另一个 nodejs 也不行,一旦查询到达 mongodb,它就是最终的,没有更多的钩子,没有更多的修改。
python 和 mongo 都不知道 mongoose 钩子。对 mongo 的所有查询都在客户端启动 - 脚本发送请求以修改数据库状态或查询数据库状态。
从 mongodb 端的更新触发 javascript 代码执行的唯一方法是使用 change streams
变更流不是 mongoose 钩子,但可用于挂钩 mongo 端的更新。这是对数据库的更高级的使用。它对 mongo 设置、oplog 的大小、变更流客户端的可用性、错误处理等提出了额外的要求。 您可以在此处了解有关变更流的更多信息https://docs.mongodb.com/manual/changeStreams/我强烈建议您寻求专业建议来构建此类设置,以避免沮丧和意外行为。
答案 1 :(得分:2)