猫鼬模式并通过python插入

时间:2020-04-21 03:31:18

标签: python node.js mongodb mongoose

我正在使用Node.js来托管WebApp,Mongoose充当了ORM。

当将数据插入某个集合中时,我会有一些钩子触发。

我希望在python脚本插入mongoDB实例时触发这些钩子。因此,如果我有一个pre save钩子,它将根据该钩子修改python脚本插入。

这可能吗?如果是这样,我该怎么办?

如果没有,请随时向我解释为什么这是不可能的和/或我为什么很愚蠢。

2 个答案:

答案 0 :(得分:4)

这是不可能的,因为 python 和 nodejs 是 2 个不同的运行时 - 无法访问彼此内存的独立进程。

Mongoose 是一个 nodejs ORM——一个将 Javascript 对象映射到 Mongodb 文档并处理对数据库的查询的库。

所有 mongoose 钩子都属于 javascript 空间。在 Mongoose 向 mongo 发送任何请求之前,它们在 javascript 对象上执行。来自那里的 2 个结果:没有其他进程可以弄乱这些钩子,甚至另一个 nodejs 也不行,一旦查询到达 mongodb,它就是最终的,没有更多的钩子,没有更多的修改。

有人说一张价值100字的图片: enter image description here

python 和 mongo 都不知道 mongoose 钩子。对 mongo 的所有查询都在客户端启动 - 脚本发送请求以修改数据库状态或查询数据库状态。

从 mongodb 端的更新触发 javascript 代码执行的唯一方法是使用 change streams

变更流不是 mongoose 钩子,但可用于挂钩 mongo 端的更新。这是对数据库的更高级的使用。它对 mongo 设置、oplog 的大小、变更流客户端的可用性、错误处理等提出了额外的要求。 您可以在此处了解有关变更流的更多信息https://docs.mongodb.com/manual/changeStreams/我强烈建议您寻求专业建议来构建此类设置,以避免沮丧和意外行为。

答案 1 :(得分:2)

Mongo 本身不支持将钩子作为一项功能,mongoose 为您提供了开箱即用的钩子,您可以像您提到的那样使用。那么你能做些什么让它在 python 中工作?

  1. 使用像 python 的 eve 这样的现有框架,eve 为您提供数据库挂钩,就像 mongoose 一样。现在 eve 是一个 REST api 框架,根据您的描述,它听起来不像您正在寻找的。不幸的是,我不知道有任何软件包可以完美满足您的需求(如果您确实找到了,如果您能在问题中分享一个链接,那就太好了)。

  2. 构建您自己的自定义包装器,例如 this 之一。您可以快速构建自定义包装器类并非常轻松地实现您自己的逻辑。