2013-12-18 11 views
14

Gibt es eine Möglichkeit, nach Objekten mit nicht gleichen Werten in einem Feld abzufragen? Zum Beispiel habe ich Aufzeichnungen:Get distinct records values ​​

{ id : 1, name : "my_name", salary : 1200 } 
{ id : 2, name : "my_name", salary : 800 } 
{ id : 3, name : "john", salary : 500 } 

Abfrage: Finden Sie alle mit NOT_THE_SAME (namen)

Ich mag Aufzeichnungen nur mit der ID 1 und 3, weil ich angegeben, dass ich mit dem gleichen Wert im Feld keine Aufzeichnungen will name oder 2 und 3, spielt es in dieser Situation keine Rolle.

Antwort

12

Sie können db.collection.distinct verwenden, um eine Reihe von eindeutigen Werten zurück zu bekommen:

> db.test.distinct("name") 
[ "my_name", "john" ] 
7

Sie auch einen deutlichen Satz mit gefiltertem Sammlung verwenden kann.

db.test.distinct("name", { "salary": { $gt: 800 } }) 
1
db.runCommand ({ 
    distinct: "CollectionName", 
    key: "key", 
    query: { "createdDate": { 
     $gte:new ISODate("2017-04-04T23:59:59Z"), 
     $lte:new ISODate("2017-04-25T23:59:59Z")}} }) 

diese Abfrage helfen finden Daten in der Sammlung wird von allen Dokumenten Wert von Schlüssel holen, die Bedingung zwischen erfüllen: Zum Beispiel können Sie verschiedene Werte von Namen von Gehältern über 800 mit der folgenden Abfrage erhalten Datum

+0

Während dieses Code-Snippet die Frage lösen kann, [hilft eine Erklärung] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) wirklich, um die Qualität Ihres Beitrags zu verbessern. Denken Sie daran, dass Sie die Frage für Leser in der Zukunft beantworten, und diese Leute könnten die Gründe für Ihren Codevorschlag nicht kennen. Bitte versuchen Sie auch nicht, Ihren Code mit erklärenden Kommentaren zu füllen, dies reduziert die Lesbarkeit sowohl des Codes als auch der Erklärungen! – Carpetsmoker

+0

@Carpetsmoker - Kommentare hinzugefügt, hoffe das hilft – GSK