2011-08-18 2 views
0

Pour un exemple, il y a un groupe appelé "A" qui est un tableau.Puis-je effectuer deux requêtes pour obtenir une valeur plus spécifique dans mongoDB?

Et il y a un autre groupe appelé "B" qui est à l'intérieur du groupe "A" aussi un tableau. Je veux trouver et mettre à jour les éléments du groupe "B".

J'ai essayé d'interroger une requête de type chaîne comme dans jQuery.

db.collection.findOne({"group":"A"}).findOne({"society":"B"}) 

quelque chose comme ça ..

mais cela ne fonctionne pas. Mais le point principal est que je veux interroger les éléments de groupe dans le groupe.

Une suggestion à ce sujet?

Si vous me donner des conseils en particulier avec la mise en œuvre de PHP, il sera très utile

Répondre

2

Peut-être que je suis malentendu quelque chose, mais ce qui ne va pas avec:

db.collection.findOne({"group":"A", "society":"B"}) 

Notez également que findOne retourne un seul document .

+0

Interrogation sur un résultat déjà interrogé. C'est possible? – InspiredJW

+0

Je vois. Pas avec le pilote MongoDB seul, je pense. Quelqu'un pourrait implémenter ce côté client. – Thilo

+0

Cela m'a quelque peu inspiré. Merci. – InspiredJW

0

En supposant que votre document ressemble à ceci:

db.mycol.insert({ 
    "_id": 1, 
    "group": "A", 
    "societies": [ 
     {"society": "A", "name": "Alpha" }, 
     {"society": "B", "name": "Beta" } 
    ] 
}); 

Puis dans le shell mongo, vous pouvez récupérer le document que vous voulez en utilisant une requête:

var group = db.mycol.findOne({ "group": "A" }); 

Et puis filtrer davantage vers le bas sur sa champs utilisant du JavaScript côté client:

var societyB = group.societies.filter(function (val) { 
    return (val.society == "B"); 
}); 

printjson(societyB); 

Vous seriez en mesure de faire quelque chose g similaire avec le pilote PHP. La clé consiste à effectuer l'action en plusieurs étapes: d'abord, attrapez le document qui vous intéresse; puis filtrer et manipuler ses champs; puis enregistrez-le dans la base de données. Je veux dire:

Questions connexes