2015-11-19 3 views
1

Je veux trouver la même valeur dans CouchDB. Ma carte estTrouver la valeur Dupliquer dans CouchDb

function(doc) { 
    var user = []; 
if(doc.type = 'user'){ 
    user.push(doc.name); 
    emit(doc.type, user); 
    } 
} 

Et je les résultats comme

["Bob"],["Peter"],["Bob"] .... 

Je voudrais avoir une réduire comme

["Bob","Peter","Bob"] 

ou un tableau avec seulement dupliquer

["Bob","Bob"] 

Je ne comprends pas Comment réduire ks. foreach value reduce est appelée ou seulement lorsque la carte est terminée?

Répondre

3

Disons que vous avez les trois documents suivants.

Bob:

{ 
    "_id": "89d9ffe10a33df504ecc8d7c9a975eed", 
    "_rev": "1-dfc3128d8d80760f2cf40328dd24553e", 
    "type": "user", 
    "name": "Bob" 
} 

Peter:

{ 
    "_id": "89d9ffe10a33df504ecc8d7c9a98a0c6", 
    "_rev": "1-820e231c44f9b3125db79e0c00bbc050", 
    "type": "user", 
    "name": "Peter" 
} 

Un autre Bob:

{ 
    "_id": "89d9ffe10a33df504ecc8d7c9a99f360", 
    "_rev": "1-dfc3128d8d80760f2cf40328dd24553e", 
    "type": "user", 
    "name": "Bob" 
} 

Vous voulez trouver des documents en double avec name valeurs. Il suffit de créer une vue sur le terrain name avec la fonction de carte suivante:

function (doc) { 
    if (doc.type == "user") { 
    emit(doc.name); 
    } 
} 

Utilisez le construit en fonction _count réduire. Si vous interrogez ce point de vue avec reduce=false, vous obtiendrez les résultats suivants:

{ 
    total_rows: 3, 
    offset: 0, 
    rows: [ 
    { 
     id: "89d9ffe10a33df504ecc8d7c9a975eed", 
     key: "Bob", 
     value: null 
    }, 
    { 
     id: "89d9ffe10a33df504ecc8d7c9a99f360", 
     key: "Bob", 
     value: null 
    }, 
    { 
     id: "89d9ffe10a33df504ecc8d7c9a98a0c6", 
     key: "Peter", 
     value: null 
    } 
    ] 
} 

Comme ces résultats sont rassemblés (triés) par name, en double name valeurs seront adjacentes dans les résultats.

Vous pouvez également interroger ce point de vue avec group=true et vous obtiendrez les résultats suivants:

{ 
    rows: [ 
    { 
     key: "Bob", 
     value: 2 
    }, 
    { 
     key: "Peter", 
     value: 1 
    } 
    ] 
} 

Tout résultat avec un value de 2 ou plus indique qu'il ya des doublons. Après avoir identifié qu'il ya des entrées en double pour la clé de "Bob", vous pouvez interroger pour tous les "Bob" s en utilisant reduce=false&key="Bob", qui vous donnera les résultats suivants:

{ 
    total_rows: 3, 
    offset: 1, 
    rows: [ 
    { 
     id: "89d9ffe10a33df504ecc8d7c9a975eed", 
     key: "Bob", 
     value: null 
    }, 
    { 
     id: "89d9ffe10a33df504ecc8d7c9a99f360", 
     key: "Bob", 
     value: null 
    } 
    ] 
}