Да, существует способ упростить запрос и сразу получить значения объекта objectId при помощи проекции в MongoDB. Проекция позволяет вам указать, какие поля должны возвращаться в результате запроса. Чтобы получить только объект objectId, можно использовать второй аргумент findOne, который определяет проекцию:
const data = await this._db.collection('counters').findOne(
{ "objectId": { $exists: true } },
{ projection: { _id: 0, objectId: 1 } }
);
// Теперь data уже будет содержать только 'objectId',
// и вы можете обращаться так: data.objectId.last
Также, если вы хотите обновить данные более эффективно, вы можете использовать оператор $inc, который инкрементирует поле на указанное значение:
await this._db.collection('counters').updateOne(
{ "objectId": { $exists : true } },
{ $inc: { "objectId.last": 1 } } // инкрементируем поле 'last' объекта 'objectId' на 1
);
Использование $inc более оптимально, поскольку оно не требует чтения текущего значения last и его последующей инкрементации в приложении. Операция инкремента выполняется непосредственно в базе данных.