node q循环遍历数组并追加daata

时间:2017-02-12 13:14:54

标签: javascript node.js q

说我有以下数组:

[{id: 1, name: 'Hello', otherTableId: 2}];

现在我希望循环遍历所有这些数组并从我的mongodb获取一些数据,我想要追加到一个新的数组然后返回。

我如何使用q

执行此操作

这是我到目前为止所做的,但我不知道用foreach代替什么:

router.route('/api/conversations')
.get(function (req, res) {
    mongoose.models.conversation.find({users: {$all: [req.query.id]}}, function (err, conversation) {
        if (err) {
            res.status(500).send(err)
        }
        else {
            var returnArray =[];
            conversation.forEach(function (x) {

            })
        }
    });
});

我的架构

var conversation = mongoose.Schema({
    users: Array
});

var user = mongoose.Schema({
    username: String,
    password: String,
    firstname: String,
    lastname: String,
    is_active: Boolean,
    user_type: Number
});

我想要返回的内容基本上是会话及其用户的列表。

像这样:[{conversation_id: String, userOne: Object, userTwo: Object}]

但我不确定是否可能?

1 个答案:

答案 0 :(得分:1)

首先,在mongoose中你建立了种群逻辑,这意味着你应该能够添加这样的东西:

conversation
.find({users: {$all: [req.query.id]})
.populate('otherTableId')
.exec(function (err, conversations) {
  // now the convesations array should have followed the link from 'otherTableId' if you have defined the ref in the schema.
})

如果我将这个问题解释得更通用,我会认为你问的Promise库Q应该支持Promise.all方法。我正在使用下面的标准ES6实现,但请随意在Q中找到相应的方法。

const ids = [1,2,3,4]
const promises = ids.map(id => mongoose.models.childTable.findOne(id))
Promise.all(promises).then(array => {
   // here you will find the array containing the objects
})