Considérez les données mongo suivantes:
substituteItemOnArray = (id, from, to) => { MyModel.update({ id: id }, { ??? What is the correct way to substitute one element with another ??? }); } substituteItemOnArray("1", "Peter", "Sarah");
Quelle est la manière correcte de remplacer un élément simple dans le tableau, pour obtenir le résultat suivant?
{ _id: "1", names: ["John", "Sarah"] }
3 Réponses :
Je ne connais aucun moyen de le faire avec uniquement des opérateurs Mongo.
Je pense que vous devrez récupérer le document par id, trouver l'index de la chaîne que vous souhaitez remplacer et seulement après cette mise à jour du document
La fonction ci-dessous devrait faire ce que j'ai décrit ci-dessus
async substituteItemOnArray = (_id, from, to) => { const doc = await MyModel.findOne({ _id }); if (doc && doc.names && doc.names.indexOf(from) > -1) { const index = dox.names.indexOf(from); const keyToUpdate = `names.${index}`; MyModel.update({ _id }, { $set: { [keyToUpdate] : to} },) } substituteItemOnArray("1", "Peter", "Sarah");
Vous pouvez le faire avec les arrayFilters mongoDB comme celui-ci dans mongoose:
function substituteItemOnArray = (id, from, to) { return MyModel.findOneAndUpdate( {id: id}, // where to update {$set: {'names.$[element]': to }}, // what to update {arrayFilters: [{'element': from}]} // what should match in array. ) } ( async () => { let doc = await substituteItemOnArray(id, "Peter", "Sarah"); console.log(doc); } )()
Utilisez simplement l'opérateur de position $
db.getCollection('test').findOneAndUpdate( { names: "Peter" }, { $set: { 'names.$': "Sarah" }} )
Est-ce que ça va marcher, peu importe les positions de "Sarah" sur le tableau? ["John", "Sarah"], ["Sarah", "John"], ["John", "Sarah", "Peter"]
, etc.
Oui, vous pouvez vérifier
names
est-il un tableau de chaînes? quelque chose commenoms: ["John", "Peter"]
. Je pense que les données sont également un type de tableauOui! Je vais corriger dans le code ...
docs.mongodb.com/manual/reference / opérateur / mise à jour /…
Copie possible de Comment mettre à jour plusieurs éléments de tableau dans mongodb
Double possible de MongoDB Remplacer les valeurs de tableau spécifiques