2014-05-07 3 views
1

C'est ma table mongodb conceptionFiltre mongodb dans un sous-document multi-niveau?

"_id" : ObjectId("5368e65ae6aa265432000002"), 
"accounts" : {}, 
"contacts" : { 
    "1" : { 
     "accounts" : { 
      "user1" : "data", 
      "user3" : "data" 
     } 
    }, 
    "2" : { 
     "accounts" : { 
      "user2" : "data", 
      "user5" : "data", 
     } 
    }, 
    "3" : { 
     "accounts" : { 
      "user4" : "data" 
      "user7" : "data", 
     } 
    } 
}, 

Mon problème est de savoir comment vérifier l'utilisateur est déjà associé à aucun des comptes objectera ou non.

par exemple j'ai les données comme user1, user2. je veux vérifier si la clé est déjà ajoutée ou pas ...

+1

Ne mettez pas vos données dynamiques (comme IDs) dans les noms de clés. Comme vous le voyez, cela ne vous donne pas de fin de problèmes. – JohnnyHK

Répondre

0

Comment vérifier si un champ existe ou non dans MongoDB vous pouvez voir here.

Dans votre cas:

db.yourcollectionname.find({"contacts.1.accounts.user1": { $exists : true }}) 

Mais malheureusement je ne peux pas répondre, comment vérifier tous les IDs (1,2,3) à une requête

+0

Probablement db.votrecollectionname.find ($ or: [{"contacts.1.accounts.user1": {$ exists: true}}, {"contacts.2.accounts.user1": {$ exists: true}}, {"contacts.3.accounts.user1": {$ existe: vrai}}]). Mais ça a l'air vraiment moche. Il semble que la conception de la structure db ne corresponde pas au modèle d'utilisation des données. Il peut être logique de penser à la restructuration. –

+0

yep besoin d'une meilleure réponse ... – balaphp

+3

@balaphp La meilleure réponse est que vous avez besoin de changer la structure de vos données. Les sous-documents comme vous ont besoin de chemins absolus comme vous avez été montré. Vous avez besoin que vos contacts soient en fait un tableau, et les clés "utilisateur" doivent être des valeurs à la place. De cette façon, vous pouvez simplement comparer. –