我希望我的一个模型中的唯一_id字段相对较短:8个字母/数字,而不是通常更长的Mongo _id。像这样的短的唯一索引会在我的代码的其他地方有所帮助,原因是我将在这里跳过。我已经成功创建了一个可以解决问题的模式(randomString是一个生成给定长度的字符串的函数):

new Schema('Activities',  {
    '_id': { type: String, unique: true, 'default': function(){ return randomString(8); } },
    // ... other definitions
}


到目前为止,此方法运行良好,但我担心从randomString函数生成的重复ID。有36 ^ 8个可能的ID,所以现在这不是问题...但是随着可能的ID设置满,我担心由于重复的ID而导致插入命令失败。

显然,我可以做一个额外的查询来检查ID是否在插入之前被获取了……但是这让我哭了起来。

我确定有更好的方法可以执行此操作,但是我在文档中没有看到它。

最佳答案

通过在_id上创建唯一索引,如果您尝试使用重复键插入文档,则会收到错误消息。因此,将错误处理包裹在您执行的所有插入中,以查找错误,然后生成另一个ID并在这种情况下重试插入。您可以在架构中添加method来实现此增强的保存功能,以保持事物的清洁和干燥。

关于node.js - Node.js + Mongoose /Mongo和缩短的_id字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11524549/

10-10 00:30