Я использую Node.JS, Express, MongoDB и EJS. У меня есть вопрос о нескольких коллекциях MongoDB под одной базой данных и их вызова для использования в интерфейсе. У меня есть 3 коллекции, и после многих исследований не удалось найти, как вызвать несколько коллекций без ошибок.Node.JS, Express & MongoDB :: Несколько коллекций
Я понимаю, что было бы неважно хранить все под одной коллекцией, но я считаю, что наилучшим подходом было бы разделить их по категориям. Вот моя коллекция дб/вызов:
app.use(express.bodyParser());
var MongoClient = require('mongodb').MongoClient;
app.get('/', function(req, res){
MongoClient.connect("mongodb://localhost:27017/michael", function(err, db) {
if(!err) {
console.log("We are connected");
}
db.collection("portfolio", function(err, collection) {
collection.find().sort({order_num: 1}).toArray(function(err, result) {
var portfolio = [];
if (err) {
throw err;
} else {
for (i=0; i<result.length; i++) {
portfolio[i] = result[i];
}
res.render('index.html', {portfolio: portfolio});
}
});
});
});
});
Как я мог бы сделать несколько вызовов дополнительных коллекций, таких как «о» коллекции, и т.д.? Я попробовал, добавив еще один ...
db.collection("about", function(err, collection) {
... в пределах ...
MongoClient.connect("mongodb://localhost:27017/michael", function(err, db) {
... но это дает мне ошибки в лог консоли терминала.
Заранее спасибо.
EDIT:
Вот что я пытаюсь сделать, это дает мне ошибку:
app.get('/', function(req, res){
MongoClient.connect("mongodb://localhost:27017/michael", function(err, db) {
if(!err) {
console.log("We are connected");
}
db.collection("portfolio", function(err, collection) {
collection.find().sort({order_num: 1}).toArray(function(err, result) {
var portfolio = [];
if (err) {
throw err;
} else {
for (i=0; i<result.length; i++) {
portfolio[i] = result[i];
}
res.render('index.html', {portfolio: portfolio});
}
});
});
// Here's the additional collection call:
db.collection("about", function(err, collection) {
collection.find().sort({order_num: 1}).toArray(function(err, result) {
var about = [];
if (err) {
throw err;
} else {
for (i=0; i<result.length; i++) {
about[i] = result[i];
}
res.render('index.html', {about: about});
}
});
});
});
});
Вот ошибку из консоли:
ReferenceError: /Volumes/Files/WebDev/RHC/michael/michael/views/index.html:62
60| <div class="row-fluid">
61| <ul id="work" class="thumbnails">
>> 62| <% for(i=0; i<portfolio.length; i++) { %>
63| <% if (portfolio[i].proj_type == "work") { %>
64| <% var newLine = ""; %>
65| <% var fancyBox = ""; %>
portfolio is not defined
Я имеют две коллекции в MongoDB под db под названием «michael», и я пытаюсь назвать их оба под одним MongoClient.connect(). Затем я отправляю результаты в front-end (через EJS) в двух массивах: «портфолио» и «о». Кажется, что, когда я это делаю, он делает «портфель» неопределенным. Надеюсь, это имеет смысл.
Что Ошибка? – WiredPrairie
Спасибо за ответ. Вот ошибка: «ReferenceError: /Volumes/Files/WebDev/RHC/michael/michael/views/index.html:62 <фрагмент кода, отображающий строку нарушения> var_name не определено в <списке оскорбительных элементов>« Извините, полный ошибка слишком длинная для комментария. – zickonezero
Интересно, что когда я добавляю новый вызов 'db.collection', ссылаясь на новую коллекцию в рамках одного и того же запроса db, страница будет отображаться при некоторых обновлениях и будет пропускать все CSS на других. Кажется, что пытаться вызвать другую коллекцию и подталкивать ее к интерфейсу, запутывает EJS и делает предыдущую коллекцию var undefined. – zickonezero