【发布时间】:2011-08-15 16:44:41
【问题描述】:
我使用的是 ExtJS 前端,而后端我使用的是 django、mongodb 和 mongoengine(ORM - 介于两者之间)。一切正常,直到我决定对我的 mongo 数据库进行分片,结果 db.eval() (使用 datbase 运行命令)不适用于分片数据库。所以我必须关掉ORM。
我发现了其他几个 ORM,例如 mongokit 和 mongoalchemy,但是我不想遍历每个单独的 ORM,并希望在将所有命令从最近的 ORM 更改为新的 ORM 后它可以工作。有谁知道不使用 db.eval() 或使用分片 mongo 数据库的 Mongo ORM?
谢谢
【问题讨论】:
-
你在用
db.eval()做什么?可能有一种方法可以重构该代码以与共享系统一起使用... -
我的意思是,您要完成什么具体任务?
db.eval不适用于分片集合,但这是 MongoDB 本身的限制,而不是 Mongoengine。详情请见Sharding Limits。 -
MongoDB 本身不允许
db.eval针对分片集合运行。这不是 Mongoengine 的限制,而是 MongoDB 本身的限制。因此,您将无法找到可以让您执行此操作的 ORM/ODM。然而,如果你能描述你最终想要完成的事情,那么可能还有另一种方法可以实现它将在分片集合上工作。 -
您意识到 Mongoengine 仅将
db.eval用于exec_js()方法,而不用于任何其他方法。如果您不在自己的代码中使用它,您可以使用 Mongoengine 与分片很好。 -
AFAIK mongoengine 仅在调用 exec_js 时使用 db.eval。如果没有 exec_js,你能完成你想做的事情吗?对我来说,这似乎不是 mongoengine 问题。