我有這個代碼
async findAll(query: SharedPreferences, req): Promise<IVehicle[]> {
const vehicles = this.vehicleModel
.find({
...req.searchObj,
...req.dateQr,
})
.sort({ [query.sort]: query.orderBy === "desc" ? -1 : 1 })
.skip(req.skip)
.populate(["owner", "branch"]);
const total = vehicles;
vehicles.limit( query.limit);
const response: any = {
result: await vehicles,
// count: total.countDocuments(), // this doesnt work here since vehicles already been awaited
limit: query.limit,
page: query.page,
};
return response;
}
我想要做的是獲得沒有(限制)查詢的車輛檔案的總數,以及一個查詢的車輛檔案(find()的陣列結果)。
我需要將 limit() 分開,以便在車輛受限時不計算車輛以獲得實際總數,但是當您等待車輛時,您將無法再訪問 .countDocuments() ,因為承諾已解決。
我將車輛復制到一個新的總變數中,我認為該變數會有所不同,但由于它處理的是相同的查詢,所以沒有用。有沒有辦法在不進行 2 次查詢的情況下實作這一點。謝謝
uj5u.com熱心網友回復:
您可以使用count運算子 on vehicles。
async findAll(query: SharedPreferences, req): Promise<IVehicle[]> {
const vehicles = this.vehicleModel
.find({
...req.searchObj,
...req.dateQr,
})
.sort({ [query.sort]: query.orderBy === "desc" ? -1 : 1 })
.skip(req.skip)
.populate(["owner", "branch"]);
vehicles.limit( query.limit);
const response: any = {
result: await vehicles,
count: await vehicles.count(),
limit: query.limit,
page: query.page,
};
return response;
如果上述方法不起作用,您可以在此處查看更多方法來實作相同的目的。
uj5u.com熱心網友回復:
所以這對我有用
async findAll(query: SharedPreferences, req): Promise<IVehicle[]> {
const vehicles = this.vehicleModel
.find({
...req.searchObj,
...req.dateQr,
})
.sort({ [query.sort]: query.orderBy === "desc" ? -1 : 1 })
.skip(req.skip)
.populate(["owner", "branch"]);
const total = await vehicles.clone().count();
vehicles.limit( query.limit);
const response: any = {
count: total,
result: await vehicles,
limit: query.limit,
page: query.page,
};
return response;
}
您可以使用 .clone() 保存查詢的副本,然后在執行 .limit() 之前獲取該查詢的計數,因此這將回傳車輛以及沒有限制的總計數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/418497.html
標籤:
上一篇:MongoGroup按查詢
下一篇:MongoDB:創建聚合管道
