Come rimuovere le voci duplicate da un array?

Come rimuovere le voci duplicate da un array?

Nell’esempio seguente “Algorithms in C ++” viene aggiunto due volte.

$ unset unset rimuove un campo particolare ma come rimuovere una voce da un campo?

> db.users.find() { "_id" : ObjectId("4f6cd3c47156522f4f45b26f"), "favorites" : { "books" : [ "Algorithms in C++", "The Art of Computer Programmning", "Graph Theory", "Algorithms in C++" ] }, "name" : "robert" } 

Quello che devi fare è usare map reduction per rilevare e contare i tag duplicati .. quindi utilizzare $set per sostituire l’intero libro basato su { "_id" : ObjectId("4f6cd3c47156522f4f45b26f"),

Questo è stato discusso sette volte qui .. per favore vedi

Rimozione di record duplicati usando MapReduce

Modo rapido per trovare i duplicati sulla colonna indicizzata in mongodb

http://csanz.posterous.com/look-for-duplicates-using-mongodb-mapreduce

http://www.mongodb.org/display/DOCS/MapReduce

Come rimuovere il record duplicato in MongoDB da MapReduce?

A partire da MongoDB 2.2 è ansible utilizzare il framework di aggregazione con uno stage $unwind , $group e $project per ottenere questo risultato:

 db.users.aggregate([{$unwind: '$favorites.books'}, {$group: {_id: '$_id', books: {$addToSet: '$favorites.books'}, name: {$first: '$name'}}}, {$project: {'favorites.books': '$books', name: '$name'}} ]) 

Si noti la necessità del $project per rinominare il campo dei favorites , poiché $group campi aggregati $group non possono essere nidificati.