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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用预先生成的id创建一个mongoose记录相关的知识,希望对你有一定的参考价值。

我正在尝试使用手动生成的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

有什么想法/建议吗?

答案

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

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

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

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

另一答案

首先生成ID,然后在将其发送到数据库之前将其分配给要创建的对象。

const generatedId = mongooTypes.ObjectId();

const newItem = {
    _id: generatedId,
    name: name,
    description: description
};

Items.create(newItem).then((item) => { 
    // Here you can check that generatedId and item._id are the same
    if (item._id.equals(generatedId)) { console.log('Created item with pre-generated ID'); }
})

以上是关于使用预先生成的id创建一个mongoose记录的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose - 获取新保存的内部记录的_id

Mongoose.js:如何实现创建或更新?

Mongoose.js:如何实现创建或更新?

在mongoose中通过id删除

mongoose.js 中带有查询生成器的 OR 运算符

mongoose.js 中带有查询生成器的 OR 运算符