mongo dbからいくつかの情報をロードして表示しようとしています。私のサイトはnode.js/expressで動作します。mongo dbの最初のテーブルの結果に基づいて2番目のテーブルからデータをロード
私は2つのテーブルを持っていますが、最初はパレットです。これはすべてロードして表示しますが、それはうまく動作します。しかし、各パレットについて、私は例のリストを持っています。私は各パレットをループし、そのパレットのすべての例を取得したいと思います。
私は間違いなく間違っています。find()メソッドが非同期であるため、余分なデータを取得する前にデータが送信されていると思います。しかし、複数回実行されているため、例のコールバックにrender関数を置くことはできません。
PHPでは、私は別のテーブルからデータを取り出し、共通のカラムに基づいて最初のテーブルに接続できるようにしていましたが、これをどうやって行うのかは分かりません手動でループを作成します。
/* GET palette database main page. */
router.get('/', function(req, res, next) {
console.log('rendering test page');
var Palette = require('../models/paletteDatabase');
//load all palettes
Palette.find({}, function(err, palettes) {
if (err) return next(err);
var PaletteExamples = require('../models/paletteExamples');
for (var i = 0; i < palettes.length; i++) {
//split the colors into an array
palettes[i].colorsArray = palettes[i].colors.split(',');
PaletteExamples.find({paletteId: palettes[i]._id}, function(err, result) {
if (err) return next(err);
palettes[i].examples=result;
});
}
res.render('palette-database', {
title: 'Palette List',
palettes: palettes,
css: 'palette-db',
js: 'palette-db'
});
});
});
この行の後にあなたの応答を送ってください 'palettes [i] .examples = result;' –
その行はループ内にあり、複数回送信される(または最初に送信される) – stackers
そしてあなたのforループを削除し、あなたのmongoリクエストで 'in'クエリを使用するのはどうですか? –