2013-12-18 25 views
14

Esiste un modo per eseguire una query per gli oggetti con gli stessi valori in alcuni campi? Per esempio io ho Records:Ottieni valori distinti di record

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

Query: trovare tutte con NOT_THE_SAME (nome)

Voglio solo record con id 1 e 3 perché ho specificato che non voglio che i record con lo stesso valore nel campo name o 2 e 3, non importa in questa situazione.

risposta

12

È possibile utilizzare db.collection.distinct per tornare un array di valori unici:

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

È anche possibile utilizzare una frase distinta con la raccolta filtrato. Ad esempio, è possibile ottenere valori distinti di nomi da stipendi più di 800 con la seguente query:

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")}} }) 

questa ricerca aiuta a trovare i dati di raccolta, sarà recuperare il valore della chiave da tutti i documenti che soddisfano condizioni di tra data

+0

Anche se questo snippet di codice può risolvere la domanda, [compresa una spiegazione] (// meta.stackexchange.com/questions/114762/explaining-entually-code-based-answers) aiuta davvero a migliorare la qualità del post. Ricorda che stai rispondendo alla domanda per i lettori in futuro, e queste persone potrebbero non conoscere le ragioni del tuo suggerimento sul codice. Cerca anche di non affollare il tuo codice con commenti esplicativi, questo riduce la leggibilità sia del codice che delle spiegazioni! – Carpetsmoker

+0

@Carpetsmoker - ha aggiunto commenti, spero che questo aiuti – GSK