對於貓鼬,您可能只需在每個查詢的結果數組上執行Promise.all()
並使用.concat()
即可。
作爲一個完整的演示:
var async = require('async'),
mongoose = require('mongoose'),
Schema = mongoose.Schema;
var d1Schema = new Schema({ "name": String });
var Data1 = mongoose.model("Data1", d1Schema);
var d2Schema = new Schema({ "title": String });
var Data2 = mongoose.model("Data2", d2Schema);
mongoose.set('debug',true);
mongoose.connect('mongodb://localhost/test');
async.series(
[
// Clean
function(callback) {
async.each([Data1,Data2],function(model,callback) {
model.remove({},callback)
},callback);
},
// Setup some data
function(callback) {
async.each([
{ "name": "Bill", "model": "Data1" },
{ "title": "Something", "model": "Data2" }
],function(data,callback) {
var model = data.model;
delete data.model;
mongoose.model(model).create(data,callback);
},callback);
},
// Actual Promise.all demo
function(callback) {
Promise.all([
Data1.find().exec(),
Data2.find().exec()
]).then(function(result) {
console.log([].concat.apply([],result));
callback()
}).catch(callback);
}
],
function(err) {
if (err) throw err;
mongoose.disconnect();
}
)
我只是在那裏async
混合例如簡潔,但它的肉是:
Promise.all([
Data1.find().exec(),
Data2.find().exec()
]).then(function(result) {
console.log([].concat.apply([],result));
})
凡Promise.all()
基本上等待並結合了這兩個結果,這將是一個「陣列數組」,但.concat()
負責。其結果將是:
[
{ _id: 59420fd33d48fa0a490247c8, name: 'Bill', __v: 0 },
{ _id: 59420fd43d48fa0a490247c9, title: 'Something', __v: 0 }
]
顯示的是從每個集合中的對象,在一個陣列接合在一起。
您也可以使用async.concat
方法作爲替代方法,但除非您已經使用該庫,否則可能只是堅持承諾。
什麼是用例?你想**所有**結果來自兩個查詢還是數據「相關」以某種方式?兩種情況都有不同的答案。它也似乎是你實際上使用[mongoose](http://mongoosejs.com/docs/guide.html),但如果你確認的話,它會很好。 –
是的,我正在使用貓鼬。數據不相關,我試圖創建一個站點地圖,有些我只是爲各種數據集生成一個URL列表。 – stackers
提供的答案中是否有某些東西可以解決您的問題?如果是這樣,請評論答案以澄清究竟需要解決的問題。如果它確實回答了你問的問題,那麼請注意[接受你的答案](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)給你的問題問。 –