2013-12-21 3 views
0

Я пытаюсь получить данные из моей mongolab БД с помощью Node-MongoDB-роднойMongoDB родные, как работать с запросом

var findAll = function() { 
    var ddocs; 
    collection.find({}).each(function (arr, docs) { 
    ddocs = docs; 
    }); 
    console.log(ddocs); 
}; 

Но, кажется, что, когда я вхожу ddocs, это даст мне неопределенно, но если я зарегистрирую документы, он покажет мне данные.

Помогите Как использовать эту функцию?

Благодаря Tzelon Machluf

+1

Возможно, вам следует сначала ознакомиться с документацией и учебным пособием node.js. Боюсь, вы далеко от правильного решения, но вы должны это понять. Исправление вашего примера не имеет смысла. – hgoebl

+0

Забудьте об узле node.js. Когда я подключаюсь к mongodb и извлекаю коллекцию. Я могу использовать функцию find для правильного получения данных? Теперь я не понимаю, как использовать эти данные, когда я пытаюсь его использовать (как в приведенном выше примере) ddocs = docs, когда docs - это данные. Я не могу определить на ddcos – TzelonM

+1

Нет. У node.js есть очень специфическая модель программирования, а node-mongodb-native строго выровнена с ней. Если вы не понимаете node.js, забудьте о доступе к MongoDB с JavaScript. Тогда вы должны использовать другой язык. – hgoebl

ответ

0

Вы в основном пытаются создать функцию, которая будет возвращать все документы в коллекции? Если это так, то нижеследующее должно работать. Тем не менее, я согласен с @hgoebl и что вы должны работать над пониманием узла, поскольку это вряд ли лучший способ выполнить то, что вы пытаетесь сделать.

var ddocs; 

var findAll = collection.find().toArray(function(err, docs) { 
    if(err) 
     throw err; 
    console.log('Collection returned'); 
    return ddocs = docs; 
}); 

setTimeout(function(err) { 
    if(err) throw err; 
    console.log(ddocs); 
    db.close(); 
}, 1000); 

Одна вещь, в частности, отметить: collection.find асинхронный, так что проблема в коде (почему он говорит ddocs неопределен) является то, что вы входите ddocs перед collection.find когда-либо закончена; таким образом, он инициализируется, но не назначает никаких значений. Соглашение Node заключается в том, чтобы вставлять обратные вызовы, чтобы все происходило в правильном порядке и когда оно было готово.

+1

Это не сработает, так как эта функция 'findAll' вернет' null'; вам нужно будет использовать обратный вызов. – JohnnyHK

+0

@JohnnyHK Вы правы на этом. Я только что исправил его, хотя он выглядит довольно не-Node-подобным. – EmptyArsenal

+0

Спасибо, ребята, я знаю, что я сделал не так, и теперь я узнаю, как справиться с моей проблемой. – TzelonM

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