【发布时间】:2014-01-06 18:04:28
【问题描述】:
如果我有一个对象数组,比如说
var myArray = [
{ name: 'Fred', state: 'CA' },
{ name: 'Jane', state: 'DE' }
];
并将它们插入到 mongo 集合中(我使用的是 node.js 和“标准”npm mongo 驱动程序,npmjs.org/package/mongodb)
someCollection.insert(myArray, errCallback);
结果对象(在内存中 - 使用调试器查看)现在添加了 _id 字段,这让我有点惊讶。
有没有办法避免这种情况?在某些方面拥有 _id 是一件好事,事实上,我写了一些额外的代码,因为我认为它不会存在!但我想将它们打印为 JSON 等,最终用户可能不想看到类似的东西
"name" : "Fred",
"_id": "52caeb50559518c01ab1dda5"
(加上可能的安全问题)
显然,我可以调整我的打印代码,但在未来最好避免这种情况,或者至少知道如何去做。如果不能避免,我肯定要自己写ID生成器。
查看文档 (http://mongodb.github.io/node-mongodb-native/api-generated/collection.html) 我看到了 forceServerObjectId,但这不是我想要的。
【问题讨论】:
-
@gview 谢谢。唉,在节点的 mongo 驱动程序中创建集合时,他们建议的解决方案 {autoIndexId: false} 未列为选项。
-
我个人的看法是,您正在尝试很长的路要禁用 mongodb 内在的某些东西,您以后可能会发现您需要。您还可以覆盖内置密钥生成并用您自己选择的密钥替换它,如果这对您有吸引力,但您的帖子表明您已经知道这一点。如果您认为您可能需要分片,您可能还需要考虑您的分片键可能是什么。分片键的问题是一旦设置它们就不能更改,因此即使您有一个多段分片键,任何组件都不能更改。
-
@gview 经过一番考虑,我同意你的看法。简单地添加我自己的密钥生成器将有助于很多事情,这样我就可以“与”Mongo“合作”而不是与之对抗。
-
@gview 除非有人在接下来的一两天内想出一些很棒的东西,如果你把你的评论作为答案,我会“接受”它。
标签: javascript node.js mongodb