хранить значения в мангусте путем удаления запятой i.e (abc или 233 или 2344 или 20000)? [Дубликат]

Официальный учебник Python 2 4.2. «for Statementments» говорит:

Если вам нужно изменить последовательность, которую вы повторяете во время цикла (например, для дублирования выбранных элементов), рекомендуется сначала сделать копию. Итерация по последовательности не подразумевает создание копии. Нотация среза делает это особенно удобным:

>>> for w in words[:]:  # Loop over a slice copy of the entire list.
...     if len(w) > 6:
...         words.insert(0, w)
...
>>> words
['defenestrate', 'cat', 'window', 'defenestrate']

, что и было предложено в: https://stackoverflow.com/a/1207427/895245

Документация Python 2 7.3. «Инструкция for» дает тот же совет:

Примечание: существует тонкость, когда последовательность изменяется контуром (это может произойти только для изменяемых последовательностей, т. Е. Списков ). Внутренний счетчик используется для отслеживания того, какой элемент используется далее, и это увеличивается на каждой итерации. Когда этот счетчик достигнет длины последовательности, цикл завершается. Это означает, что если пакет удаляет текущий (или предыдущий) элемент из последовательности, следующий элемент будет пропущен (поскольку он получает индекс текущего элемента, который уже был обработан). Аналогично, если пакет вставляет элемент в последовательность перед текущим элементом, текущий элемент будет обрабатываться снова в следующий раз через цикл. Это может привести к неприятным ошибкам, которых можно избежать, создав временную копию, используя фрагмент всей последовательности, например

for x in a[:]:
    if x < 0: a.remove(x)

. Может ли Python сделать это лучше?

Кажется, что этот конкретный API Python может быть улучшен. Сравните его, например, со своим Java-партнером ListIterator , что делает его совершенно ясным, что вы не можете изменить список, который выполняется итерацией, за исключением самого итератора, и дает вам эффективные способы сделать это без копирования списка , Давай, Питон!

2
задан raju 7 May 2014 в 14:44
поделиться

1 ответ

Хотя я не уверен в значении req.body.starttime, я уверен, что вы ищете функцию объектов Schema pre(), которая является частью Mongoose Middleware и позволяет определение функций обратного вызова, которые должны быть выполнены до сохранения данных. Вероятно, что-то вроде этого делает желаемое задание:

var RunSchema = new Schema({
  [...]
  starttime: {
    type: Date,
    default: Date.now
  }
});

RunSchema.pre('save', function(next) {
  this.starttime = new Date();
  next();
});

Обратите внимание, что функция обратного вызова для события save вызывается каждый раз перед созданием или обновлением записи. Таким образом, это, например, способ явно установить «измененную» временную метку.

EDIT:

Благодаря вашему комментарию я теперь лучше понял, чего вы хотите достичь. Если вы хотите изменить данные до того, как они будут назначены и сохранены в записи, вы можете легко использовать свойство set схемы:

// defining set within the schema
var RunSchema = new Schema({
  [...]
  starttime: {
    type: Date,
    default: Date.now,
    set: util.getDate
  }
});

Предполагая, что объект util находится в пределах области действия (требуется или что-то еще) ваша текущая реализация соответствует сигнатуре для свойства set:

function set(val, schemaType)

Необязательный параметр schemaType позволяет вам проверять свойства определения поля схемы, если процесс преобразования зависит на это никак.

7
ответ дан matthias 26 August 2018 в 13:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: