У вас по-прежнему есть часть в миллисекундах (или, по крайней мере, так будет выглядеть), поэтому будет вставлен новый документ, если эта часть уникальна в течение текущей минуты.
Вот ваш код, который неправильно оставляет миллисекунды на месте:
И когда вы удаляете и миллисекунды, это правильно:
Или просто округлите значение timestamp
, прежде чем передать его:
Так что, когда дата фактически округляется до «минуты», как вы ожидали, тогда все в порядке.
Суть в том, что «upsert» происходит только тогда, когда предоставленные условия (по сути, «ключ» документа) фактически не соответствуют ни одному существующему документу, поэтому что-то явно отличается в каждом запросе и наиболее вероятно кандидат - это значение timestamp
в вашем коде и его последующее преобразование.
Тем не менее, если вы на самом деле не читаете timestamp
из внешнего или уже определенного источника, тогда лучший способ получить "текущее время" - просто использовать ванильные Date
методы:
var timestamp = Date.now();
timestamp = timestamp - ( timestamp % ( 1000 * 60 ) );
console.log(new Date(timestamp));
Это должно сделать эту работу без необходимости возиться с дополнительными импортированными библиотеками.
Таким образом, вам действительно нужно посмотреть, почему у вас есть текущий код, и если вы читаете уже определенное значение, то фактически «гарантируете», что миллисекунды и секунды удаляются при округлении, как обычно лучше всего подходит по модулю.
Единственная другая причина вне самой отметки времени - фактическое значение itemId
, которое изменяется в каждом запросе. Но если вы делаете это, то действие ожидается и, конечно, создаст новый документ, в котором «комбинация» не существует, потому что именно это и должно быть сделано.