2017-07-07 7 views
0

Ich habe eine Sammlung von Dokumenten, in denen jedes Dokument die folgenden Eigenschaften hat: userId, permissions.Suchen Abfrage mit Bedingungen

Wie kann ich die findOne Abfrage verwenden, um ein Dokument zurückzugeben, das userId = 41 AND permissions = admin OR permissions = op-admin hat?

Ich habe die folgende Abfrage versucht, aber es gibt keine Ergebnisse ...

User.findOne(
    { 
    'userId': 42 
    }, 
    { 
    $and: [ 
     { 
     $or: {'permissions': 'admin'} 
     }, 
     { 
     $or: {'permissions': 'op-admin'} 
     } 
    ] 
    }, function(err, doc) { 
    if(err) { 
    console.log(doc); 
    console.log(err); 
    } 
}); 

Gibt es etwas, was ich nicht richtig tue?

+0

'.find ({ "userId": 42 "Berechtigungen": { "$ in": [ 'admin', 'op-admin']}})'. Das '$ in' ist im Grunde eine Kurzschrift für' $ or', wird aber auf den gleichen Schlüssel angewendet. Sie müssen auch fast nie die knappen "$ und" verwenden. Danke Robert –

+2

@NeilLunn benötigt auch die 'userId'; D – robertklep

+0

@NeilLunn Ich habe versucht, Ihren Code und auch' userId' zur Abfrage hinzugefügt und es funktioniert perfekt. Sie sollten diesen Kommentar als Antwort – Valip

Antwort

0

Versuch:

User.find({ 
      $and: [ {'userId': 42 } , 
       { $or: [ {'permissions': 'admin'}, {'permissions': 'op-admin'} ] } 
      ]}) 
Verwandte Themen