findOneAndUpdate - 文档查询 > 1000

findOneAndUpdate - document query > 1000

所以我有一个包含超过 100 万个文档的集合,我不需要搜索 1000 个或更多文档,因为它应该只更新最新的文档。

const nowplayingData = {"type":"S",
                        "station": req.params.stationname, 
                        "song": data[1], 
                        "artist": data[0], 
                        "timeplay":npdate};

LNowPlaying.findOneAndUpdate( nowplayingData,
                             { $addToSet: { history: [uuid] } },
                             { upsert: true, sort: {_id:-1} }, 
                             function(err) {
                                            if (err) {
                                               console.log('ERROR when submitting round');
                                               console.log(err);
                                            }
                             });

我在上面添加了排序,这样可以先获取最新的,但是如果文档不在里面,而且是第一次添加文档,那么脚本的编写方式将查询所有文档以查找。

实际上它只需要查看最后说的 100 个文档,如果 timeplay 在最后 5 分钟内,则更好。

您可以这样做:

const nowplayingData = {
    "type":"S","station": req.params.stationname, "song": data[1], "artist": data[0], 
    "timeplay":{$gte: beforeFiveMin}};

但这几乎每次都会创建一个新文档...因此您需要维护它...