Модель контакта имеет идентификатор пользователя и вложенный документ в качестве контактов.
Contact.findOne({userId : req.userData.userId}).exec().then( doc =>{
console.info(doc);
res.status(200).json({doc})
}).catch(err => {
console.info(err);
res.status(500).json({error : err})
})
И этот вывод кода выглядит так:
{
"doc": {
"_id": "5fd4c77508f14a1e108c8788",
"userId": "5fd4c77508f14a1e108c8787",
"contacts": [
{
"_id": "5fd4e9cc08f14a1e108c8789",
"name": "muaz",
"number": 123415123,
"contactImage": "uploads\\2020-12-12T16-03-24.588Zqweqqq.png"
},
{
"_id": "5fd4ea102502ab1130549bbb",
"name": "muazs",
"number": 123415123,
"contactImage": "uploads\\2020-12-12T16-04-32.561Zqweqqq.png"
}]}
И я получаю идентификатор контакта из запроса (req.params.userId).
Например: Когда я получаю запрос как req.param.userId = 5fd4e9cc08f14a1e108c8789
Я хочу отправить ответ следующим образом:
{
"_id": "5fd4e9cc08f14a1e108c8789",
"name": "muaz",
"number": 123415123,
"contactImage": "uploads\\2020-12-12T16-03-24.588Zqweqqq.png"
}
Как я могу получить этот контакт с методами поиска модели?
самый актуальный вопрос здесь stackoverflow.com/questions/65267374/mongoose-nested-query
const {userId}=req.params;
Contact.findOne({"contacts._id":userId}, {contacts:{$elemMatch:{_id:userId}})
.then(data=>res.send(data.contacts[0]))
.catch(err=>res.send("Not found!"))
Это вернет только совпадающие данные пользователя на основе идентификатора пользователя, сохраненного как _id, именно то, что вы хотите.
Я не понимаю часть с идентификатором, поэтому у вас есть идентификатор в вашем запросе, а также в вашей записи в базе данных?