自己定义主键并防止在 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\""}
- 创建数据库时,字段
_id
由 mongodb 创建并称为键。我应该使用什么命令来防止创建该字段?我如何在数据库中自己定义关键字段或 select 我自己的定义字段作为要搜索的主键?
如果你想这样做,你应该使用find
方法:
const get = await product.find({id:req.params.id});
我不确定,但我认为无法避免在 mongodb 中创建字段 _id
,但如果您指定可以避免 ObjectId
类型插入文档时具有自定义值(应该是唯一的)的字段 _id
。
但是如果你想使用自定义 id
值,你将需要使用你自定义 id
的 mongoose find
方法,正如我之前指出的那样。由于您的自定义 id
字段应该是唯一的,您可以使用 findOne
来提高查询的性能。
我有两个问题:
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\""}
- 创建数据库时,字段
_id
由 mongodb 创建并称为键。我应该使用什么命令来防止创建该字段?我如何在数据库中自己定义关键字段或 select 我自己的定义字段作为要搜索的主键?
如果你想这样做,你应该使用find
方法:
const get = await product.find({id:req.params.id});
我不确定,但我认为无法避免在 mongodb 中创建字段 _id
,但如果您指定可以避免 ObjectId
类型插入文档时具有自定义值(应该是唯一的)的字段 _id
。
但是如果你想使用自定义 id
值,你将需要使用你自定义 id
的 mongoose find
方法,正如我之前指出的那样。由于您的自定义 id
字段应该是唯一的,您可以使用 findOne
来提高查询的性能。