2011-11-16 3 views
0

Je développe une application web en utilisant Codeigniter et la bibliothèque Alex Bilbies MongoDB. Chaque utilisateur a reçu un document contenant un élément appelé téléphones qui contient un tableau de numéros de téléphone. Comment puis-je retirer un élément du tableau du document des utilisateurs sélectionnés?MongoDB supprimer un élément du tableau d'un document sélectionné

Reconnaissant pour toute aide!

+0

soutien de Mongo a $ retirer de la boîte: http://www.mongodb.org/display/DOCS/Updating#Updating-%24pull – ioseb

+0

Oui, mais puis-je tirer sur un élément de tableau spécifique? –

Répondre

1

aide MongoDB tirer $ pour enlever élément du tableau spécifique du tableau:

> db.mycollection.insert({user: "test", items: [1234, 5678, 91011]}); 
> db.mycollection.find() 
{ "_id" : ObjectId("4ec3b9af8d1ae67f1fb2b30a"), "user" : "test", "items" : [ 1234, 5678, 91011 ] } 
> db.mycollection.update({user: "test"}, {$pull: {items: 5678}}); 
> db.mycollection.find() 
{ "_id" : ObjectId("4ec3b9af8d1ae67f1fb2b30a"), "items" : [ 1234, 91011 ], "user" : "test" } 
+0

Nice. Mais comment puis-je tirer d'un tableau d'un document spécifique? –

+0

Je dois le faire fonctionner en utilisant la bibliothèque Alex Bilbies MongoDB. –

+0

Eh bien, lorsque vous utilisez des opérateurs modificateurs, vous n'avez pas besoin de spécifier le document entier, vous devez spécifier uniquement les critères et spécifier le champ que vous devez modifier. En termes de PHP cela ressemblerait à: $ coll-> update (array ('nom d'utilisateur' => 'jamesbond', array ('$ pull' => array ('items' => 5678))); – ioseb

2

Même je suis tombé sur un problème lorsqu'il est directement essayer de tirer une valeur d'un tableau en utilisant la bibliothèque Alex Bilbies MongoDB. Cette approche fonctionne pour moi, d'abord en désactivant la valeur, puis en tirant tous les zéros.

Hope this helps

$this->mongo_db->where('items', "5678")->unset_field('items.$')->update('mycollection'); 
$this->mongo_db->pull('items', NULL)->update('mycollection'); 
Questions connexes