2010-09-27 7 views
0

En supposant une collection comme ceci:Comment trouver de la valeur dans une collection mongoDB, indépendamment du nom du champ?

People 
{ 
    "name": "John Doe", 
    "email": "John Doe <[email protected]>", 
    "stuff": "foo" 
    "morestuff": "bar" 
}, 
{ 
    "name": "Homer Simpson", 
    "email": "Homer Simpson <[email protected]>", 
    "stuff": "bar" 
    "morestuff": "foo" 
}, 
{ 
    "name": "Bart Simpson", 
    "email": "Bart Simpson <[email protected]>", 
    "stuff" : "foo" 
    "morestuff": "foo" 
    "evenmore": ["bar", "foo", "baz"] 
} 

Quelle pourrait être la meilleure façon de trouver toutes les occurrences de la chaîne « foo » (exactement, pas sous-chaîne), où jamais il peut se produire? Ce que je voudrais accomplir est de mettre à jour toutes les occurrences de la chaîne 'foo' à une autre chaîne, ou le supprimer d'un document dans la collection.

Je sais que cela pourrait ressembler à une mauvaise conception de base de données, je veux juste faire comprendre ce que je voudrais faire :)

Répondre

1

Il n'y a aucune requête qui le fera.

Pour le cas général, vous devez parcourir tous les documents et consulter toutes les propriétés.

Si vous pouvez limiter les clés de propriété possibles, vous pouvez construire une requête comme

name = 'foo' or email = 'foo' or stuff ='foo' 
    or morestuff = 'foo' or evenmore = 'foo' 

Si ce dernier est possible, vous pouvez également divisé en requêtes distinctes pour tous les domaines, ce qui est logique parce que vous pouvez puis les transformer en requêtes de mise à jour atomiques pour changer la valeur du nouveau.

+0

Merci pour la réponse. J'avais l'impression qu'il n'y avait pas de solution simple, comme c'est le cas dans le SGBDR. Peut-être que l'on peut faire quelque chose comme ça en utilisant map/reduce? – xlttj

Questions connexes