2016-08-17 2 views
0

Im new to mongodb и node js, поэтому, пожалуйста, извините меня, если это очень просто. Таким образом, у меня есть схема:Создайте массив элементов из mongodb - node js

var mongoose = require('mongoose'); 

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

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

И когда я добавить данные в моих д.б.н., это выглядит следующим образом:

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

Я хочу, чтобы вызвать DBS и создать массив cat_names для каждого документа Коллекция.

Так что конечный эффект выглядит следующим образом:

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

Любая идея, как это сделать? Я попытался использовать цикл foreach, db.collection('cats'), но я просто не могу понять это.

+1

если мы используем разные, он не будет печатать кошек с таким же именем. –

ответ

1

Это работает для меня: 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

Для чего нужны 'JSON.stringify' и' JSON.parse'? – JohnnyHK

+0

В противном случае вы получите 'undefined', возвращенный, когда cat_names вызывается – deeveeABC

+0

Хмм ... это не имеет смысла. Вы можете пропустить эти вызовы и просто выполнить data.forEach (... '. – JohnnyHK

1

Вы можете использовать exec, это позволит вам вернуть массив документов JSON, которые вы получили.

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

Я специально хочу, чтобы имена кошек возвращались только –

+0

Хорошо исправил код. – 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); 
    }) 

Я тестировал этот код и работает нормально для вашего требования.

+0

Хм ... Я получаю следующее: «[undefined, undefined, undefined]« Любая идея, почему? –

+0

мой плохой, я сделал глупую ошибку, этот ответ теперь обновлен, пожалуйста, проверьте еще раз. Я использовал 'forEach', чтобы вы могли понять это лучше. –

+0

Еще одна вещь, у меня есть путаница, просто 'console.log (data)' сначала, чтобы проверить, работает ли запрос нормально или нет. –

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

Надеюсь, он решит ваш запрос.

Смежные вопросы