Node.js异步循环遍历对象数组

时间:2017-01-02 02:48:46

标签: javascript arrays node.js mongodb

对不起,如果标题本身是矛盾:) JS初学者在这里..

我得到一个MongoDB文档数组,我想用另一个对象(从另一个表)扩展每个文件,以便我可以将这个扩展对象数组传递给我的视图。我希望实现这样的目标:

import csv

def dict_to_csv(scraped_values_dict): 
    my_dict = scraped_values_dict
    with open('mycsvfile.csv', 'a') as f:
        w = csv.DictWriter(f, my_dict.keys())
        if f.tell() == 0:
            w.writeheader()
            w.writerow(my_dict)
        else: 
            w.writerow(my_dict)

我认为这不是JavaScript的方式:)所以我该如何实现呢?

谢谢,

2 个答案:

答案 0 :(得分:2)

使用聚合框架中的 $lookup 函数。以下示例演示了如何在您的情况下应用它:

exports.myFunction = function(req, res) {
    Book.aggregate([
        { "$match": { "good": true } },
        {
            "$lookup": {
                "from": "authors"
                "localField": "author_id",
                "foreignField": "_id",
                "as": "author"
            }
        },
        { "$unwind": "author" }
    ]).exec(function(err, docs) { 
        res.render('/books.ejs', {books: docs});
    });
}

答案 1 :(得分:1)

我找到了另一个使用populate的解决方案。

为此,我需要更改我的Book模型,

发件人:

var mongoose = require('mongoose');
var Author = require('./author.js'); // added this

var bookSchema = mongoose.Schema({
author: { type: mongoose.Schema.Types.ObjectId, ref: 'Author' },
good: Boolean
});

populate()

我将exports.myFunction = function(req, res) { Book.find({'good': true}).populate('author').exec(function(err, docs) { // find good books // render books: res.render('/books.ejs', {books: docs}); }); } 链接到我的初始查询,如下所示:

$percentile_50 = $array[round((50/100) * $count_array -.5)];