使用预先生成的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记录的主要内容,如果未能解决你的问题,请参考以下文章