说我有以下数组:
[{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
}]
但我不确定是否可能?
答案 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
})