2013-08-11 5 views
0

Cela peut être trivial, mais je n'ai pas trouvé un moyen de le faire.requête MongoDB avec condition sur plusieurs enregistrements

Dire que j'ai les enregistrements suivants dans la base de données:

{ A: 1, B: 2, C: "Red" } 
{ A: 1, B: 2, C: "Blue"} 
{ A: 1, B: 3, C: "Red" } 

Et je veux retourner tous les enregistrements avec {A: 1, C: "Red"}, mais pas quand C: "Blue" s'il y a plusieurs enregistrements avec les mêmes valeurs B. Donc, pour les enregistrements ci-dessus, il ne retournera que le 3ème enregistrement. Le premier enregistrement ne sera pas renvoyé car il existe deux enregistrements avec la même valeur B et l'un d'entre eux a la valeur C: "Blue".

Je ne peux penser à faire cela via deux requêtes à la base de données, à savoir la première requête {A: 1, C: "Rouge"}, puis vérifier en interrogeant tous les éléments dans la base de données. Je suppose que la deuxième étape pourrait être beaucoup plus que juste une requête.

Je ne veux pas vraiment interroger avec {A: 1}. Bien sûr, je fais tout cela à travers l'API, donc ça va être une requête de base de données, mais la liste qui en résultera pourrait être beaucoup plus grande que je le voudrais.

Y at-il une requête qui peut faire ce que je veux via seulement 1 appel de base de données? Merci.

Répondre

2

Je ne pense pas que ce soit possible avec une requête. Mais vous pouvez obtenir tous les B que vous voulez avec aggregate et base de données de requête pour que B:

db.test1.aggregate(
    [ 
     {$group: {_id: "$B", count: {$sum:1}}}, 
     {$match: {count:1}} 
    ] 
) 

vous ramènera tous les B pour lesquels il un seul enregistrement dans votre collection.

+0

Ah je vois, merci. Je suppose qu'il y a des enregistrements avec comme '{C: white}' que je n'ai pas besoin d'exclure alors malheureusement il semble qu'il n'y ait pas de moyen de faire une seule requête. – Victor

Questions connexes