我该如何解决:“MongoError: $where is not allowed in this atlas tier”?

Yul*_*ale 5 mongodb mongodb-query

如何解决:使用 MongoDB Atlas 时出现“MongoError: $where is not allowed in this atlas tier”的问题?

这是我的代码:

async function getEventsTakingPlace(){
    const getEventsTakingPlace = await event.find({$where: function() { 
        return ((this.eventTime < new Date()) && (new Date(this.eventTime).getTime()+ 100*60000 > new Date().getTime() ) ) }},
        function(err, events){
        if(err){
            return err;
        }else {
            return events; 
        }
    }); 
    return getEventsTakingPlace 
};
Run Code Online (Sandbox Code Playgroud)

当我使用本地 mongoDB 实例时,它可以工作,但是一旦我开始使用 mongoAtlas,我就会收到错误消息:此地图集层中不允许使用 $where。我该如何解决这个问题?

Joh*_*yHK 7

虽然$where您正在使用的 Atlas 层可能不支持它,但好消息是您不需要将它用于此查询。

相反,使用如下查询:

let now = new Date();
let min = new Date();
min.setTime(now.getTime() - 100*60000);
const events = await event.find({eventTime: {$gt: min, $lt: now}});
Run Code Online (Sandbox Code Playgroud)

一般来说,您只想将$where其作为最后的手段,因为它效率不高。


Yul*_*ale 6

我刚刚被告知免费套餐 (M0)、M2 和 M5 实例有一些限制和命令限制,包括用于分析的指标有限。因此我必须升级以获得更多功能......

  • 你是对的,我看到它列在这里.. dangit .. :/ https://docs.atlas.mongodb.com/reference/free-shared-limitations/ 其中,在“服务器端Javascript”下,它说、 $where 和 map-reduce 不受支持。呃…… (2认同)