自己定义主键并防止在 mongodb 中创建 _id

define primary key myself and prevent creating the _id in mongodb

我有两个问题: 1- 我想从数据库中获取 Id,但操作是基于 MangoDB 自动创建的密钥,例如 _id。我想根据我自己创建的字段进行搜索,例如:id。对于这只海豚,我使用了以下内容:

app.get('/:id',async(req,res)=>{
    try{
        const get=await product.findById({id:req.params.id});
        res.json(get);
    }
    catch(err){
        res.send(err);
    }
});

并获得以下输出:

{"stringValue":"\"{ id: '1' }\"","valueType":"Object","kind":"Number","value":{"id":"1"},"path":"_id","reason":{"generatedMessage":true,"code":"ERR_ASSERTION","actual":false,"expected":true,"operator":"=="},"name":"CastError","message":"Cast to Number failed for value \"{ id: '1' }\" (type Object) at path \"_id\" for model \"product\""}
  1. 创建数据库时,字段 _id 由 mongodb 创建并称为键。我应该使用什么命令来防止创建该字段?我如何在数据库中自己定义关键字段或 select 我自己的定义字段作为要搜索的主键?

如果你想这样做,你应该使用find方法:

const get = await product.find({id:req.params.id});

我不确定,但我认为无法避免在 mongodb 中创建字段 _id,但如果您指定可以避免 ObjectId 类型插入文档时具有自定义值(应该是唯一的)的字段 _id

但是如果你想使用自定义 id 值,你将需要使用你自定义 id 的 mongoose find 方法,正如我之前指出的那样。由于您的自定义 id 字段应该是唯一的,您可以使用 findOne 来提高查询的性能。