使用预先生成的id创建一个mongoose记录

时间:2017-12-06 12:34:57

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

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

我使用一些预定义的键定义了一个const数组,其余的我希望由mongoose生成。下面是一个用样本数据填充数据库的片段。

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)

这不起作用我想要。我获得了与数组中一样多的记录。拥有mongoose生成的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

有任何想法/建议吗?

1 个答案:

答案 0 :(得分:0)

您不需要手动生成ID,因为它将由Mongoose 自动生成。你只需要定义一个模式 - 这就是全部。请不要指定&#39; id&#39;和&#39; _id&#39;架构中的字段。一切都将由Mongoose处理。

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

请注意,您可以设置自己的ID,但默认情况下它的工作方式如上所述。

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