Node JS, express, Mongoose,嵌套查询

Node JS, express, Mongoose, nested queries

本文关键字:嵌套 查询 Mongoose express JS Node      更新时间:2023-09-26

我有一组嵌套查询express/mongoose,很像这样:

app.get(..., function(...) {
   Schema1.query(..., function(..., res1) {
      for ( var key in res1 ) {
           Schema2.query(..., function(..., res2) {
             data[key].appendedAttribute = res2.somedata;
            });
      }
      res.render(..., data);
   });

});

不起作用,也就是说,appendedAttribute永远不会添加到数据集。我做错了什么?

使用after

app.get(..., function(...) {
    Schema1.query(..., function(..., res1) {
        var cb = after(Object.keys(res1).length, function () {
            res.render(..., data);    
        });
        for (var key in res1) {
            Schema2.query(..., function(..., res2) {
                data[key].appendedAttribute = res2.somedata;
                cb();
            });
        }
    });
});

基本上,您必须在第二个查询完成后才触发res.render调用。

使用步骤:
app.get(..., function(...) {
  var data;
  Step(
    function first_query() {
      Schema1.query(...,this);
    },
    function multiple_queries(err, res1) {
      for (var key in res1) {
        Schema2.query(..., function(..., res2) {
          data[key].appendedAttribute = res2.somedata;
          this.parallel(); // make sure callback gets executed only after all the queries are executed
        });
      }     
    },
    function render() {
      res.render(..., data);
    }
  );
});