MongoDb: Différence entre $ push / $ addtoset

J’ai lu la documentation dans le MongoDb et j’ai utilisé une preuve simple et je ne regarde que cela: Push sortinge le tableau mais addtoSet ne l’est pas.

Pour moi, visuellement c’est pareil, je ne connais pas la différence.

Quelqu’un pourrait-il m’expliquer la différence?

Un autre pense que si cela pourrait être en espagnol ou dans un anglais simple, je le recommanderai.

$addToSet n’ajoute pas l’élément au champ donné s’il le contient déjà, d’autre part, $push appenda l’object donné au champ, qu’il existe ou non.

 {_id: "docId", items: [1, 2]} db.items.update({_id:"docId"}, {$addToSet:{items: 2}}); // This won't update the document as it already contains 2 db.items.update({_id:"docId"}, {$push: {item:2}}); // this will update the document. new document {_id: "docId", items:[1,2,2]} 

$ push – ajoute les éléments dans l’ordre dans lequel ils ont été reçus. Aussi, vous pouvez append plusieurs articles plusieurs fois

$ addToSet – ajoute uniquement des éléments uniques, mais l’ordre des articles n’est pas garanti

Si vous devez append des éléments uniques ordonnés, vous pouvez grouper et append des éléments via $ addToSet, puis $ unwind array avec des éléments, $ sort by items, puis refaire $ group avec des éléments $ push.

$ addToSet et $ push font la même chose, cependant $ push pousse tout élément ignorant la duplication provoquant la redondance. Le premier ne pousse que des objects uniques, pas de duplication.

Comme son nom l’indique, $ addToSet (set) n’autorise pas les doublons alors que $ push ajoute simplement l’élément au tableau

$ push: insère la valeur dans un tableau du document résultant. par exemple;

 db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}]) 

$ addToSet: Insère la valeur dans un tableau du document résultant, mais ne crée pas de doublons. par exemple;

 db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])