簡體   English   中英

MongoDB,Mongoose - 獲取10k +文檔時查詢速度慢

[英]MongoDB, Mongoose - Slow query when fetching 10k+ documents

我有一個包含10-12k文檔的MongoDB數據庫,在嘗試獲取所有文檔時遇到的查詢速度非常慢,如下所示:

Sales.find()
    .where('author').equals(author)
    .where('date').gt(startDate.unix()).lt(endDate.unix())
    .exec(function(err, results) {
        callback();
    });

此查詢提取大約10.5k文檔,執行時需要1000-1300ms。 我嘗試刪除“where”條件 - 它只會使它變慢(獲取更多文檔?)。

問題來自Mongoose,MongoDB,JavaScript還是Node? 我以前運行PHP / MySQL數據庫,在類似條件下速度提高10-20倍,比如獲取10k +行數據。 我究竟做錯了什么?

編輯

銷售架構:

var salesSchema = new Schema({
    author: String,
    kind: String,
    productID: String,
    description: String,
    date: String,
    amount: String,
    transactionID: {
        type: String,
        unique : true
    }
});

來自RoboMongo桌面客戶端的查詢結果:

db.getCollection('sales').find({}).explain()

executionTimeMillis: 46
nReturned: 10359

問題來自Mongoose。 默認情況下,find()會將文檔作為Mongoose Documents返回,這會花費很多。 通過向查詢添加lean(),文檔作為純JavaScript對象返回,對於10k +返回文檔的情況,查詢時間減少了3-5倍

Sales.find()
    .where('author').equals(author)
    .where('date').gt(startDate.unix()).lt(endDate.unix())
    .lean()
    .exec(function(err, results) {
        callback();
    });

在這里閱讀更多內容: http//www.tothenew.com/blog/high-performance-find-query-using-lean-in-mongoose-2/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM