2013-08-22 8 views
0

sous-document que j'ai les documents suivants dans le MongoDBMongoDB requête exacte

{ "_id" : ObjectId("5215c622f8b2bae39d82b54c"), "params" : { "groupBy" : "days", "country" : "A", "city" : "b" } } 
{ "_id" : ObjectId("5215c62df8b2bae39d82b54d"), "params" : { "groupBy" : "days", "country" : "A" } } 
{ "_id" : ObjectId("5215c643f8b2bae39d82b54e"), "params" : { "groupBy" : "days" } } 

et j'ai essayé de trouver le premier document à cette requête

{params : {groupBy : 'days', country : 'A', 'city' : 'b'}} 

OK, pas de problème, cela fonctionne. Essayons

{params : {groupBy : 'days', city : 'b', country : 'A'}} 

et celui-ci ne fonctionnent pas surprenant. OK, maintenant je sais que l'ordre est important.

Je sais que je peux le faire pour rechercher le premier document si je veux ignorer l'ordre des attributs. Maintenant, considérez que je veux trouver le 2ème document et je ne connais pas l'ordre des attributs avant. donc ce que je vais faire est

{'params.groupBy' : 'days' , 'params.country' : 'A'} 

mais cette requête trouve à la fois le 1er et le 2e documents. Alors, comment puis-je trouver le deuxième document avec une seule requête?

Edit: Une autre condition est que je ne suis pas sûr combien d'attributs auront dans les params sous-document dans le futur et il peut continuer à changer de temps en temps

+0

essayez '{params: {GroupBy: "jours", pays: "A"}}' –

+0

mais je ne l'ordre avant. donc je sais pas que ça devrait être '{params: {groupBy:" days ", pays:" A "}}' ou '{params: {country:" A ", groupBy:" jours "}}' –

+0

order is matter. Dans ce cas, votre chaîne de requête doit être exactement identique au sous-document du document. –

Répondre

1

Pour trouver le 2ème document avec un seul requête, vous devrez utiliser l'opérateur $exists.

Votre requête ressemblerait à ceci:

db.params.find({'params.groupBy': 'days', 'params.country': 'A', 'params.city': {$exists: false}}) 
+0

Merci. Mais en réalité je ne suis pas sûr combien d'attributs auront dans le sous-document params et il peut continuer à changer de temps en temps –

+0

Dans ce cas, vous devez ajouter cela à votre question car cela répond à votre requête initiale de trouver le second document vos exemples –