2016-08-17 5 views
0

Ich bin neu zu Mongodb und Knoten js so bitte entschuldigen Sie mich, wenn dies sehr einfach ist. So habe ich ein Schema:Erstellen Array von Elementen aus Mongodb - Knoten js

var mongoose = require('mongoose'); 

var CatSchema = new mongoose.Schema({ 
    cat_name: String, 
    cat_value: Number 
}); 

module.exports = mongoose.model('Cat', CatSchema); 

Und wenn ich Daten zu meinem dbs hinzufügen, sieht es wie folgt aus:

> db.cats.find() 
{ "_id" : ObjectId("..."), "cat_name" : "test1", "__v" : 0, "cat_value" : 55 } 
{ "_id" : ObjectId("..."), "cat_name" : "test2", "cat_value" : 24, "__v" : 0 } 
{ "_id" : ObjectId("..."), "cat_name" : "test1", "__v" : 0, "cat_value" : 70 } 

Ich mag die dbs anrufen und eine Reihe von cat_names für jedes Dokument erstellen in die Sammlung.

So sieht die endgültigen Auswirkungen wie folgt aus:

var cat_names = [test1, test2, test1 ... ] 

Jede Idee, wie dies zu tun? Ich versuchte mit der foreach Schleife, db.collection('cats') aber ich kann es einfach nicht herausfinden.

+1

Wenn wir distinct verwenden, werden keine Katzen mit demselben Namen gedruckt. –

Antwort

1

Dies funktioniert für mich: var cat_names = [];

Cat.find(function(err, data){ 
    if(err){    
     console.log(err); 
    } 
    var stringify = JSON.stringify(data) 
    content = JSON.parse(stringify); 

    content.forEach(function(result){ 
     cat_names.push(result.cat_name); 
    }) 

    console.log(cat_names); 
}) 
+0

Was sind die 'JSON.stringify' und' JSON.parse' Aufrufe? – JohnnyHK

+0

Sonst bekommst du 'undefined' zurück, wenn cat_names – deeveeABC

+0

heißt Hmm ... das macht keinen Sinn. Sie können diese Anrufe überspringen und einfach 'data.forEach (...'. – JohnnyHK

1

Sie könnten exec verwenden, damit Sie ein Array der JSON-Dokumente zurückgeben können, die Sie abgerufen haben.

db.cats.find(function(err, cats){ 
    var arr_docs = cats.map(function(cat) { return cat.cat_name}); 
    if(err){ 
     res.json(err) 
    } else { 
     res.json(arr_docs) 
    } 
}) 
+0

Ich möchte speziell die Katzennamen zurück nur –

+0

Okay den Code behoben. – inoabrian

0
var cat_names = []; 

    db.cats.find(function(err, data){ 
     if(err){    
      console.log(err); 
     } 

     data.forEach(function(result){ 
      cat_names.push(result.cat_name); 
     }) 

     console.log(cat_names); 
    }) 

Ich habe diesen Code getestet und arbeitet für Ihre Anforderung in Ordnung.

+0

Hmm ... Ich bekomme folgendes: '[undefined, undefined, undefined]' Irgendeine Idee warum? –

+0

mein Schlechter, machte ich einen dummen Fehler, diese Antwort ist jetzt aktualisiert, bitte überprüfen Sie noch einmal. Ich habe 'forEach' verwendet, damit du es besser verstehen kannst. –

+0

Noch eine Sache, ich fyou irgendwelche Verwirrung, nur 'console.log (Daten)' zuerst, um zu überprüfen, ob die Abfrage funktioniert gut oder nicht. –

0
Cat 
    .find() 
    .then(function(cat){ 
    var cat_Names_Array = []; 
    cat.map(function(value){ 
     cat_Names_Array.push(value.cat_name); 
    }); 

    return cat_Names_Array; 
    }) 
    .catch(function(err){ 
     console.log('err in finding:',err); 
    }); 

Ich hoffe, es wird Ihre Abfrage lösen.

Verwandte Themen