gpt4 book ai didi

Node.JS、Express 和 MongoDB::多个集合

转载 作者:IT老高 更新时间:2023-10-28 13:27:46 24 4
gpt4 key购买 nike

我正在使用 Node.JS、Express、MongoDB 和 EJS。我有一个关于一个数据库下的多个 MongoDB 集合的问题,并调用它们在前端使用。我有 3 个集合,经过大量研究,还没有找到如何调用多个集合而不会出错。

我知道将所有内容存储在一个集合中不会有问题,但我觉得最好的方法是按类别将它们分开。这是我的数据库/集合调用:

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) {

...但它在终端控制台日志中给了我错误。

提前致谢。

编辑:

这是我正在尝试做的事情,这给了我一个错误:

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

所以我在名为“michael”的数据库下的 MongoDB 中有两个集合,我试图在一个 MongoClient.connect() 下调用它们。然后,我将结果以两个数组的形式(通过 EJS)发送到前端:“portfolio”和“about”。似乎当我这样做时,它会使“投资组合”未定义。希望这是有道理的。

最佳答案

好的,使用 aesede 的解决方案加上我自己的修补,我得到了它来渲染两个集合。它可能需要一些技巧,但这是我得到的:

// GLOBAL ARRAYS FOR STORING COLLECTION DATA
var collectionOne = [];
var collectionTwo = [];
app.get('/', function(req, res){
MongoClient.connect("mongodb://localhost:27017/michael", function(err, db) {
if(!err) {
console.log("We are connected");
}
db.collection("collectionOne", function(err, collection) {
collection.find().sort({order_num: 1}).toArray(function(err, result) {
if (err) {
throw err;
} else {
for (i=0; i<result.length; i++) {
collectionOne[i] = result[i];
}
}
});
db.collection("collectionTwo", function(err, collection) {
collection.find().sort({order_num: 1}).toArray(function(err, result) {
if (err) {
throw err;
} else {
for (i=0; i<result.length; i++) {
collectionTwo[i] = result[i];
}
}
});
});
// Thank you aesede!
res.render('index.html', {
collectionOne: collectionOne,
collectionTwo: collectionTwo
});
});
});
});

我发现的唯一错误是,当 Node 重新启动并在浏览器中点击“刷新”时,我没有看到 HTML 中呈现的任何内容。但是,任何后续刷新都会始终如一地显示内容。

关于Node.JS、Express 和 MongoDB::多个集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18299749/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com