GOOGLE ADS

vendredi 22 avril 2022

Pourquoi findOne({ id }) ne fonctionne pas correctement dans mongoose 6.012

J'utilise mangouste pour trouver un utilisateur par son identifiant mais cela ne fonctionne pas correctement. J'ai essayé plusieurs approches différentes, mais je n'ai obtenu que de mauvais résultats ou des erreurs.

Voici mon code.

const { id } = req.params;
const user = await User.findOne({ id });
console.log(id);
console.log(user);
return res.redirect("back");

J'ai essayé les approches suivantes

1 - await User.findOne({ id });retour du premier utilisateur, quel que soit son identifiant.

target id: a8fc083f3f55494fa2cadf9
{
_id: new ObjectId("618fb03e37876d1f0bccb945"),
name: 'bohetefyhy',
email: 'refo@mailinator.com',
dataRealm: new ObjectId("618fb0119eefb1308fe65610"),
role: 'user',
createdAt: 2021-11-13T12:31:58.846Z,
updatedAt: 2021-11-15T08:03:34.422Z,
__v: 0
}

2 - await User.findOne({ id: id });retournant le même résultat que ci-dessus (1).

3 - await User.findOne({ _id: id });donner une erreur.

CastError: Cast to ObjectId failed for value "a8fc083f3f55494fa2cadf9" (type string) at path "_id" for model "User"
at model.Query.exec (C:\Users\khan\Documents\Projects\030FL014_Windshield\app\node_modules\mongoose\lib\query.js:4545:21)
at model.Query.Query.then (C:\Users\khan\Documents\Projects\030FL014_Windshield\app\node_modules\mongoose\lib\query.js:4644:15)
at processTicksAndRejections (internal/process/task_queues.js:97:5)

J'ai également remarqué que dans le résultat, il manque un champ d' identification ajouté par mangouste. Et pour la valeur _id est new ObjectId("618fb03e37876d1f0bccb945" ) au lieu de simplement "618fb03e37876d1f0bccb945"

j'utilise

"mangouste": "^6.0.12",

MongoDB 5.0.3 2008R2Plus SSL (64 bits)

Ok, j'ai donc trouvé le problème, il n'y a que 23 caractères dans mon ID d'objet dont un manque depuis le début. mais toujours pourquoi il manque un champ d'identification à cet ajout de mangouste et pourquoi il _id est un nouvel ObjectId("618fb03e37876d1f0bccb945" ) au lieu de simplement "618fb03e37876d1f0bccb945" lorsque je me connecte


Solution du problème

J'étais confronté au même problème, et c'est ainsi que j'ai résolu d'obtenir les données pour l'ID que je recherche.

const ObjectId = require('mongodb').ObjectId;
const id = '61929f3efc232d63cd9dcb6b';
user.findOne({ _id: ObjectId(id) })
.then((result) => {
console.log(result);
})
.catch((err) => {
console.log(err);
});

Ce sont les données que j'ai pour l'information des utilisateurs

Données d'informations sur les utilisateurs

Le résultat:

{
_id: new ObjectId("61929f3efc232d63cd9dcb6b"),
name: 'Ibrahem',
email: 'I-A-H@hotmail.com',
age: 24,
createdAt: 2021-11-15T17:56:14.089Z,
updatedAt: 2021-11-15T17:56:14.089Z,
__v: 0
}

Aucun commentaire:

Enregistrer un commentaire

Comment utiliseriez-vous .reduce() sur des arguments au lieu d'un tableau ou d'un objet spécifique ?

Je veux définir une fonction.flatten qui aplatit plusieurs éléments en un seul tableau. Je sais que ce qui suit n'est pas possible, mais...