Mongoose Find()需要几分钟才能返回最新文档



如果我将文档添加到DB(通过我的应用程序或通过DB Admin Tool Rockmongo),我立即看到正在添加到DB中的文档(如Rockmongo所示), 没问题。但是,当我在相应的猫鼬模型上调用简单的model.find()时,未返回DB的最新添加。他们最终在几分钟后出现。

看来,文档正在从某种尚未更新的缓存/缓冲区中读取。我忽略了猫鼬中有类似的东西吗?

我的后端就是这样:

var mongoose = require('mongoose');
require('./models/Locations');
mongoose.Promise = global.Promise;
mongoose.connect(mongoUrl,{ config: { autoIndex: false } });
var Locations = mongoose.model('Locations');
[...]
app.get('/locations', function(req, res, next) 
{
    Locations.find(function(err, results)
    {
        if(err){return res.status(500).json(err);}
        res.json(results);
    });
});

模型:

var mongoose = require('mongoose');
var LocationsSchema = new mongoose.Schema({
    name: String
});
mongoose.model('Locations', LocationsSchema);

如果我在DB中手动将项目添加到位置,然后将浏览器指向/位置,则直到几分钟后才看到新项目...

更改以下内容:

Locations.find(function(err, results)
{
    if(err){return res.status(500).json(err);}
    res.json(results);
});

Locations.find({},function(err, results)
{
    if(err){return res.status(500).json(err);}
    res.json(results);
});

已经很长时间了,但是我注意到我从未回答这个问题,所以我想我可能会遇到这个问题。不过,这对我的设置非常具体。问题是甘地使用默认情况下使用具有相对激进的设置的缓存引擎(Varnish),从而导致我在WebApp中看到的缓慢更新。

为了解决这个问题,可以明确设置标头以停用缓存,例如:

res.setHeader('Cache-Control', 'max-age=0');

最新更新