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}};
但这几乎每次都会创建一个新文档...因此您需要维护它...
所以我有一个包含超过 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}};
但这几乎每次都会创建一个新文档...因此您需要维护它...