2014-12-02 11 views
43

Ho letto la documentazione nel MongoDb e ho usato un semplice proves e ho solo l'impressione che: Push sta ordinando l'array ma non lo è addtoSet.

Per me visivamente è lo stesso, non conosco la differenza.

Qualcuno potrebbe spiegarmi la differenza?

Un altro pensa se potrebbe essere in spagnolo o in un inglese semplice, lo apreciterò.

+4

'$ push' non ordina mai un array. Sia '$ push' e' $ addToSet' aggiungono nuovi elementi alla fine su un array di destinazione. –

+0

Sono in errore. Sto malinteso. Grazie. –

risposta

70

$addToSet non aggiungere l'articolo al campo specificato se già lo contiene, d'altra parte $push aggiungerà l'oggetto dato al campo se esiste o meno.

{_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]} 
+0

Grazie per la tua spiegazione ora sto facendo un altro esempio e questa volta sto meglio conoscendo. –

+0

Prego =) – cubbuk

1

$ addToSet e $ push fa la stessa cosa, tuttavia $ push spinge solo qualsiasi elemento ignorando la duplicazione causando ridondanza. Il primo spinge solo oggetti unici, nessuna duplicazione.

1

come il nome suggerisce $ addToSet (set) non permetterà duplicati mentre $ trasmetterà tutte è sufficiente aggiungere l'elemento di matrice

1

$ spingono - aggiunge elementi nell'ordine in cui sono stati ricevuti. Inoltre è possibile aggiungere stesse voci diverse volte

$ addToSet - aggiunge articoli appena unici, ma ordine degli elementi non è garantito

Nel caso in cui avete bisogno di aggiungere oggetti unici ordinato, è possibile raggruppare e aggiungere elementi tramite $ addToSet, quindi $ unwind array con elementi, $ ordina per elementi, quindi esegui di nuovo $ group con $ push items.

+0

Questo dovrebbe essere contrassegnato come la risposta corretta. –

Problemi correlati