【问题标题】:Create a mongoose record with a pre-generated id使用预先生成的 id 创建一个 mongoose 记录
【发布时间】:2018-05-20 08:14:02
【问题描述】:

我正在尝试使用手动生成的 ID 填充集合。我需要这个来让测试人员更容易提供反馈,因为我们会通过 ID [除其他外] 搜索记录。

我用几个预定义的键定义了一个const 数组,其余的我想由猫鼬生成。下面是用示例数据填充数据库的片段。

var col = db.collection('clients')
for (let i = 0; i < count; i++) {
  var client = createClientRecord()
  if (cifs.length > i) {
    client._id = cids[i]
  } else {
    client._id = new mongoose.Types.ObjectId
  }
  console.log('client._id:', client._id)

这行不通,我想这样做。我得到的记录与数组中的记录一样多。拥有猫鼬生成的 ID 不起作用。代码只是卡在那里。

另外,我将我的schema 定义为:

const clientSchema = new mongoose.Schema({
  id: {type: String, unique: true, required: true},
  email: { type: String, unique: true, required: true },
  birthName: String,
  ...
})

这是一个有效的选项吗?我可以自己手动创建唯一的id 吗?应该是id 还是_id

有什么想法/建议吗?

【问题讨论】:

    标签: javascript node.js mongodb mongoose mongoose-schema


    【解决方案1】:

    您无需手动生成 ID,因为它将由 Mongoose 自动完成。您只需要定义一个模式 - 就是这样。请不要在模式中指定“id”和“_id”字段。一切都将由猫鼬处理。

    至于最后一个问题('id' 或 '_id'),'_id' 是 MongoDB id 本身(对象 ID),但 'id' 是 '_id' 的字符串化 getter。 'id' 和 '_id' 看起来很相似,但它们的类型不同。 'id' 是一个字符串,'_id' 是一个对象 id,所以我们有以下条件。它们在值上相等,但在类型上不相等。

    请注意,您可以设置自己的 ID,但默认情况下,它的工作方式与上述说明相同。

    请点击此链接: http://mongoosejs.com/docs/guide.html#id

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-19
      • 1970-01-01
      • 2019-07-06
      相关资源
      最近更新 更多