首页 > 解决方案 > 使用代码中创建的 id 保存实体,猫鼬

问题描述

如何从外部传递文档的 id 而不是 mongoose 生成它?我需要用我告诉他们的 id 来存储对象,但是 mongoose 会覆盖它并用他想要的那个来保存它。我现在尝试了几种方法,但没有任何反应。

它是我通过多个数据库中的事件分发的实体,因此我需要将它与我想保持数据完整性的 id 一起存储。

现在我有了这个,上面写着“文档在保存之前必须有一个 _id”,但是我已经放了它的 id 无法识别它。方案是这样的:

const schema = new Schema({
_id: { type: String },
name : { type: String },
});

我也试过这个,错误是一样的:

const schema = new Schema({
    _id:  { type : String },
    name : { type: String },
},
{
    _id: false
});

我正在传递这样的对象:

Item.create({ _id: 'my uuid here', name: 'something' });

但是当它被保存时,它仍然是由 mongoose 生成的 id 替换我的,也就是说,它用 _id 将它更改为我:'5twt563e3j5i34knrwnt43w'

标签: node.jsmongodbmongoose

解决方案


你的语法应该可以工作,但有时猫鼬的行为很奇怪。

您可以尝试这种语法(适用于我的项目):

const item = new Item({ name: 'something' });    
item._id = 'my uuid here';
await item.save();

推荐阅读