我的數據庫中有幾百個文檔。模式很簡單:多個查詢以不可預知的排序結果結束
var firmsSchema = mongoose.Schema({
name: String,
sections: [String],
});
我想查詢文件和遍歷:
{{#each sections}}
{{sectionName}}
{{#each firms}}
{{firmName}}
{{/each}}
{{/each}}
簡單:
const SECTIONS = ['name_one', 'name_two', 'name_three'];
const UNSORTED_SECTION_NAME = 'unsorted';
router.get('/', function(req, res, next) {
var showFirms = function showSection (i, acc) {
if (i < 0) return;
let query = SECTIONS[i] ? {sections: SECTIONS[i]} : {sections: {$nin: SECTIONS}};
let key = SECTIONS[i] || UNSORTED_SECTION_NAME;
Firms.find(query).
then((result) => {
acc.push({
section: key,
firms: result,
});
if (i === SECTIONS.length) {
acc = acc.sort((a, b) => (a.section > b.section));
res.render('template', {
sections: acc,
});
}
}).
then(showSection (i - 1, acc));
}
showFirms(SECTIONS.length, []);
};
工作正常。除了它返回acc
隨機和不可預知的排序。我的意思是'name_two'
部分可以按照'name_one'
或反之亦然。
我認爲.sort()
在承諾的末尾鏈將是一個銀色的子彈在這裏,並解決所有的異步問題,但它沒有。
當然,我可以排序acc
與把手幫手後,我把它傳遞給我的模板,但它是如此荒謬的奇怪,我不能排序後,我的showFirms
功能已完成所有查詢。
你能給我一些建議嗎?
不應該排序成爲您對mongodb的請求的一部分嗎?如果返回值不可預知,我看不到如何處理查詢以外的排序 – Icepickle
您正在字符串之間進行比較。例如:'name_one'>'name_two'。這是錯的 –
這裏的問題是我運行多個請求('showSection'是一個遞歸函數),然後我收集累加器'acc'的所有結果,然後傳遞給我的模板。如果排序是每個請求的一部分,它只需對每個響應中的元素進行排序。這不是我想要實現的。 – ivanzolotov