【发布时间】:2012-07-19 08:46:51
【问题描述】:
我遇到了一个奇怪的问题,我们在本地开发环境中使用 MongoDB,在 Heroku 上使用 MongoLabs 作为生产环境。现在问题出在 MongoLabs 处理 _id 字段的方式上。而不是使用 _id: '0x....' 它使用 _id: { $oid: '0x...'}。
这似乎导致了一些问题,因为某些代码在生产环境中无法按预期运行,但在我们的本地机器上运行良好。
我们在这个项目中使用 Nodes.js 和 Mongoose 和 Express。当它给我 undefined for model._id 时,我注意到了这个问题。
有没有办法强制两者保持一致?最好强制 MongoLab 使用 _id: '0x...'?
更新:我设法弄清楚为什么我得到未定义的 id。我们只是使用 cwd() 来要求一些模块,最终需要一个具有相似名称的不同模块,因为我们运行生产构建的 cwd 与开发构建略有不同。
但我仍然想知道为什么 MongoLabs 使用该 id 变体,以及尽管如此它仍然如何工作。
【问题讨论】:
-
Yagudaev- 您看到的是驱动程序、MongoLab UI 还是 REST API 的行为?谢谢 - 会
-
使用 Heroku 上的 MongoLab UI 工具检查数据表明使用的 id 结构是
_id: { $oid: 'abc5f....' }。使用命令行mongo工具,它使用_id: 'abc5f....'。 -
记录是如何添加的?使用 UI 还是驱动程序?
-
记录是使用 Mongoose 添加的。我们还在本地使用它在 Ubuntu 和 Mac OS X 机器上进行开发。这只是数据库给它的默认 ID。
标签: database node.js heroku mongoose mlab