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

时间:2017-03-05 22:13:35

标签: node.js mongodb mongoose mean-stack

如果我将文档添加到数据库(通过我的应用程序,或通过数据库管理工具RockMongo),我立即看到正在添加到数据库的文档(如RockMongo所示),没问题。但是,当我在相应的Mongoose模型上调用简单的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);

如果我在数据库中手动将项目添加到地点,并将我的浏览器指向/位置,我几分钟后才能看到新项目...

2 个答案:

答案 0 :(得分:0)

改变这个:

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);
});

答案 1 :(得分:0)

已经有很长时间了,但是我注意到我从未回答过这个问题,所以我想我可能会遇到其他人。这是非常特定于我的设置。问题在于,Gandi默认情况下使用缓存引擎(Varnish)并设置了相对激进的设置,导致我在Web应用程序中看到的更新缓慢。

要解决此问题,可以显式设置标头以停用缓存,例如:

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