将mongodb对象ID设置为“字符串”而不是“ Schema.Types.ObjectId”是不好的做法吗?

时间:2019-02-19 13:35:06

标签: node.js mongodb express mongoose

我想知道这是否会影响性能或其他重要功能,特别是在mongodb集合中查找文档时

我已经做到了

var ComputerArticleSchema = mongoose.Schema({
    _id: {
        type: String,
        required: true
    },

通常这样做

_id: {
    type: Schema.Types.ObjectId,
    required: true
},

3 个答案:

答案 0 :(得分:0)

不是性能,而是当您有两个以上的模型并且它们具有关联时,如何在它们之间进行链接。因此,有必要。而且您不必像以前那样手动定义(写入),mongodb会自动创建_id。

答案 1 :(得分:0)

_id是自动创建的!

如果要引用其他表,请使用“ table_id”(或其他键名),并将类型指定为Schema.Types.ObjectId或Schema.ObjectId。

const ObjectId = Schema.ObjectId;

user_id: { type: ObjectId, ref: 'User' }

答案 2 :(得分:0)

存储字符串而不是ObjectIds 确实会降低性能。

ObjectId比等效字符串(它们是12字节的二进制值,而不是24个字符的UTF-8字符串值),因此它们占用的内存空间更少。

当索引和文档在工作集中(即在内存中)时,Mongo确实非常快,因此通过降低数据占用量,您可以确保更多文档保留在内存中。这一点特别重要,因为您要谈论的id字段通常包含在索引中。