2013-08-20 1 views
0

Je possède ce schémamongodb trouver que des éléments spécifiés

{ 
    cc: [ 
      { user_id: "1", hasSeen:true} 
     ,{ user_id: "2", hasSeen:false} 
     ,{ user_id: "3", hasSeen:false} 

    ] 
    ,conversation: [{ 
     user_id: "1", 
     text: "message by 1, to 2and3" 
    }] 
} 
,{ 
    cc: [ 
      { user_id: "1", hasSeen:true} 
     ,{ user_id: "2", hasSeen:false} 
     ,{ user_id: "3", hasSeen:false} 
     ,{ user_id: "4", hasSeen:false} 
    ] 
    ,conversation: [{ 
     user_id: "1", 
     text: "message by 1, to 2,3and4" 
    }] 
} 

Voilà comment je mis le db « boîte de réception ». Pour trouver les conversations où il est facile à utiliser « 1 », j'utilise cette requête:

find({ cc:{$elemMatch:{ user_id:"1"}} }) 

et il fonctionne très bien, mais il me rend à la fois les résultats.

maintenant je voudrais trouver l'élément qui a seulement utilisateur 1,2and3. et si j'utilise cette requête

find({ cc:{$elemMatch:{ user_id:"1", user_id:"2", user_id:"3" }} }) 

il me rend aussi le deuxième élément, sorcière comprend également l'utilisateur 4. (et je ne veux pas le faire).
Je veux dire que la dernière requête fonctionne comme l'opérateur (ou sql) "ou" et j'ai besoin d'utiliser l'opérateur "et".

Une idée?

Répondre

0

Résolue d'une autre manière, en comptant les éléments!

UserInbox.findOne({ 'cc.user_id': { $all: ["1","2","3"] }, cc:{ $size: 3 } }); 

espoir d'aider quelqu'un d'autre :)

Questions connexes