Вставить поле с $currentDate в коллекцию MongoDB в Метеор
Не уверен, как использовать $currentDate при вставке документа в коллекцию MongoDB в Meteor.
Можно ли это использовать только в обновлении, а не вставить? Казалось бы странным, но я не вижу альтернативы (кроме использования new Date
).
Пример
Stuff.insert({
owner: Meteor.userId(),
createdAt: ..., // how to create this field with $currentDate ?
theStuff: "Some of the good stuff"
})
Примечания/Мысли/TL, DR
- Поля не могут начинаться с $операторов или, насколько мне известно, фигурных скобок
{}
.
- Какой смысл иметь оператор, который работает только с обновлениями, если это действительно так?
- Почему/когда
$currentDate
лучше, чем new Date
?
- Одна хорошая вещь, если использовать Moment.js esp, заключается в том, что $currentDate вводится в формате ISO 8601.
- Является ли ответ на какой-то вопрос с самого начала? Если да, может ли это иметь непреднамеренные последствия?
Ответы
Ответ 1
Какой смысл иметь оператор, который работает только с обновлениями, если это действительно так?
$currentDate
является оператором обновления , поэтому вы не можете используйте его с помощью метода collection.insert
. Но когда upsert
будет true
, он создаст новый документ, если документ не будет соответствовать критериям запроса. Операторы MongoDB склонны следовать философии Unix
Сделайте одно дело и сделайте это хорошо
Таким образом, каждый оператор должен выполнять только одну задачу.
Почему/когда $currentDate
лучше, чем new Date
?
Сначала я хотел бы упомянуть, что new Date
является экземпляром даты JavaScript.
$currentDate
и new Date
могут использоваться, когда вы хотите обновить значение поля до текущей даты, но с помощью new Date
вам нужно использовать другой оператор update чтобы он работал. Например:
-
Используя new Date
db.collection.update({ "name": "bar" }, { "$set": { "date": new Date() }})
-
Использование $currentDate
db.collection.update({ "name": "bar"},
{ "$currentDate": { "date": { "$type": date }}}
)
В отличие от $currentDate
, new Date
можно использовать с помощью метода insert
, и значение может быть установлено на конкретное, если Date
- вызов с более чем на аргумент.
Ответ 2
Вы можете получить временную метку из автогенерируемого "_id", созданного в операции вставки.
http://api.mongodb.com/java/current/org/bson/types/ObjectId.html
Просто используйте метод: ObjectId.getTimestamp().
Гранулярность отметки времени находится в секундах.
Ответ 3
Это станет проще, если вы будете использовать autoValue в модели коллекции
createdAt:
type: Date
autoValue: ->
if this.isInsert
return new Date
else if this.isUpsert
return $setOnInsert: new Date
else
this.unset()
Он будет автоматически устанавливать дату во время вставки или обновления данных в ней