Voici mes user
y product
des schémas :
const productSchema = new Schema({
//...
addedBy: {
type: mongoose.Schema.Types.ObjectId,
ref: "users"
}
});
const userSchema = new Schema({
//...
addedItems: [{
type: mongoose.Schema.ObjectId,
ref: "products"
}]
});
mongoose.model("products", productSchema);
mongoose.model("users", userSchema);
Dans ma route dorsale Node, je fais cette requête :
User.findOneAndUpdate(
{ _id: req.body.id },
{ $push: { addedItems: newProduct._id } },
{ upsert: true, new: true },
function(err, doc) {
console.log(err, doc);
}
);
En console.log
imprime ceci :
{
//...
addedItems: [ 5ab0223118599214f4dd7803 ]
}
Tout semble bon. Je vais regarder les données en utilisant le site Web frontal de mon BDM. mlab.com et c'est ce qui ressort :
{
//...
"addedItems": [
{
"$oid": "5ab0223118599214f4dd7803"
},
{
"$oid": "5ab0223118599214f4dd7803"
}
]
}
Question : Que s'est-il passé ? Pourquoi ajoute-t-il une entrée supplémentaire dans addedItems ? ! Même si mon console.log n'en montre qu'une.
Nota:
J'ai testé pour voir si la route backend était appelée plus d'une fois. Ce n'est pas le cas.
Il semble que ce soit un problème avec $push
parce que si j'ai juste { addedItems: newProduct._id }
alors une seule entrée entre, mais elle écrase le tableau entier.
Edit :
J'ai fait un projet de test pour produire les mêmes résultats : https://github.com/philliprognerud/test-mcve-stackoverflow
Quelqu'un peut-il comprendre ce qui se passe ?