Vous pouvez itérer tous vos éléments et les mettre à jour un par un avec la conversion en Date
. Voici un exemple pour convertir votre date mm/dd/yyyy
-ISODate
:
db.test.find().forEach(function(res){
if (typeof(res.date)=="string"){
var arr = res.date.split("/");
res.date = new Date(arr[2], arr[0] - 1, arr[1]);
db.test.save(res)
}
}
)
Pour horodatage Unix (Millis d'époque), vous pouvez appeler getTime()
de Date
:
db.test.find().forEach(function(res){
if (typeof(res.date)=="string"){
var arr = res.date.split("/");
res.date = new Date(arr[2], arr[0] - 1, arr[1]).getTime();
db.test.save(res)
}
}
)
Notez que ces dates seront converties au format UTC, donc vous pouvez vouloir changer temporairement votre fuseau horaire avant de faire votre conversion
Vous pouvez également utiliser bulk update si vous voulez optimiser les performances de mise à jour
Vous pouvez également simplement convertir votre date en yyyy-mm-dd
qui préservera le tri (vérifiez this post). Ce qui suit se décompose votre champ de date dans day
, month
et year
, champ de date fixée avec le nouveau format et écrire la sortie dans une nouvelle collection nommée test2
:
db.test.aggregate([{
$project: {
startTime: 1,
endTime: 1,
date: {
$let: {
vars: {
year: { $substr: ["$date", 6, 10] },
month: { $substr: ["$date", 0, 2] },
dayOfMonth: { $substr: ["$date", 3, 2] }
},
in : { $concat: ["$$year", "-", "$$month", "-", "$$dayOfMonth"] }
}
}
}
},{
$out :"test2"
}])
Merci @BertrandMartel. Ceci est vraiment utile mais je cherchais à garder cela dans MongoDB car cela fait partie d'une requête globale. Si tout est possible, je cherche à éviter d'utiliser Javascript, PHP, etc. pour faire la conversion. Existe-t-il un processus utilisant divers opérateurs MongoDB pour y parvenir? –
J'ai mis à jour mon article avec un moyen de convertir votre format de date de chaîne en 'aaaa-mm-dd 'ce qui n'est pas ce que vous voulez en premier lieu mais qui préserve le tri par rapport à' mm-dd-yyyy' –