У меня два вопроса:
1- Я хочу получить идентификатор из базы данных, но операция основана на ключе, который автоматически создается MangoDB, например, _id. Я хочу искать на основе поля, которое я создал сам, например: id. для этой porpouse я использовал следующее:
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 и известен как ключ. Какую команду следует использовать, чтобы предотвратить создание этого поля? как мне самому определить ключевое поле в базе данных или выбрать свое собственное поле определения в качестве первичного ключа для поиска?




Если вы хотите сделать это, вы должны использовать метод find:
const get = await product.find({id:req.params.id});
Я не уверен, но я думаю, что невозможно избежать создания поля _id в mongodb, хотя вы можете избежать типа ObjectId, если укажете поле _id с произвольным значением (должно быть уникальным) при вставке документа .
Но если вы хотите использовать пользовательское значение id, вам нужно будет использовать метод мангуста find по вашему индивидуальному id, как я указал ранее. Поскольку ваше пользовательское поле id должно быть уникальным, вы можете использовать findOne, чтобы повысить производительность запроса.