У меня есть большая коллекция из 300 question
объектов в базе данных test
. Я могу легко взаимодействовать с этой коллекцией через интерактивную оболочку MongoDB; однако, когда я пытаюсь получить коллекцию через Mongoose в приложении express.js, я получаю пустой массив.
У меня вопрос, как я могу получить доступ к этому уже существующему набору данных вместо того, чтобы воссоздать его в экспрессе? Вот некоторый код:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
mongoose.connect('mongodb://localhost/test');
mongoose.model('question', new Schema({ url: String, text: String, id: Number }));
var questions = mongoose.model('question');
questions.find({}, function(err, data) { console.log(err, data, data.length); });
Это выводит:
null [] 0
Model.collection.insert();..
mongoose.connect("mongodb://localhost/fromlab"); var Schema = mongoose.Schema; var User = mongoose.model("User", new Schema({}), "users"); User.find({}, function(err, doc){ console.log((doc)) })
Вот абстракция ответа Уилла Натана, если кому-то нужна простая надстройка для копирования и вставки:
просто сделать,
find(collection_name, query, callback);
чтобы получить результат.например, если у меня есть документ {a: 1} в коллекции 'foo', и я хочу перечислить его свойства, я делаю это:
источник
Вы можете сделать что-то вроде этого, чем получить доступ к встроенным функциям mongodb внутри mongoose:
источник
У меня была та же проблема, и я смог выполнить запрос без схемы, используя существующее соединение Mongoose с кодом ниже. Я добавил простое ограничение 'a = b', чтобы показать, где вы бы добавили такое ограничение:
источник
question
в приведенном выше коде,fs.files
и все готово.Вы уверены, что подключены к БД? (Я спрашиваю, потому что я не вижу указанный порт)
пытаться:
Кроме того, вы можете выполнить «показ коллекций» в оболочке mongo, чтобы просмотреть коллекции в вашей базе данных - может быть, попробуйте добавить запись через mongoose и посмотреть, чем она заканчивается?
Судя по вашей строке подключения, вы должны увидеть запись в «тестовой» базе данных.
Надеюсь, поможет!
источник
questions
коллекции, когда данные, к которым я пытаюсь получить доступ, находятся вquestion
коллекции. Mongoose автоматически плюрализует названия коллекций / моделей?Что-то еще, что было неочевидно, по крайней мере для меня, было то, что при использовании третьего параметра Mongoose, чтобы избежать замены фактической коллекции новой коллекцией с тем же именем, это на
new Schema(...)
самом деле только заполнитель, и не мешает существующим схема такработает нормально и возвращает все поля - даже если фактическая (удаленная) схема не содержит ни одно из этих полей. Mongoose все еще будет хотеть это как
new Schema(...)
, и переменная почти наверняка не взломает это.источник