Użyłem mongoimport do importowania niektórych danych CSV do mongodb.Jak zmienić typ mongody z Double lub Integer na String?
Najczęściej tworzy typy poprawnie, ale istnieje kilka przypadków, w których tworzone były liczby podwójne lub liczby całkowite, w których pożądane są ciągi.
Próbowałem już kilka technik, aby przekonwertować te pola na ciągi bezskutecznie.
Oto co próbowałem:
Ten produkowany niepożądaną zmianę typu Object (typ = 3):
db.temp.find({ 'name' : { $type : 16 } }).forEach(function (x) {
x.name = new String(x.name); // convert field to string
db.temp.save(x);
});
Wynik wyglądał następująco:
> db.temp.findOne({name: {$type:3}})
{
"_id" : ObjectId("541a28ddbf8a2e3ee8439b58"),
"name" : {
"0" : "0",
"1" : ".",
"2" : "2",
"3" : "2"
}
}
Ten produkowany bez zmian:
db.temp.find({name: {$exists:true}}).forEach(function(x) {
x.name = "" + x.name;
});
ten wytwarza się bez zmian:
db.temp.find({name: {$exists:true}}).forEach(function(x) {
x.name = x.name + "";
});
ten nie powodowały zmiany:
db.temp.find({name: {$exists:true}}).forEach(function(x) {
x.name = "" + x.name + "";
});
ten nie powodowały zmiany:
db.temp.find({name: {$exists:true}}).forEach(function(x) {
x.name = x.name.toString();
});
ten wytwarzany błąd: TypeError: obiekt 0,22 nie ma metody "toNumber"
db.temp.find({name: {$exists:true}}).forEach(function(x) {
x.name = x.name.toNumber().toString();
});
To pytanie zostało zadane wcześniej. Spójrz na odpowiedź na to ['pytanie'] (http://stackoverflow.com/questions/4973095/mongodb-how-to-change-the-type-of-a-field) –
Dzięki. Przeczytałem już odpowiedzi na to pytanie i kilka innych. O dziwo, dwie pierwsze odpowiedzi na pytanie, o którym wspomniałeś, wydają się nie działać. Jak wskazano, odpowiedź z góry przekonwertowała typ na Object (type = 3) zamiast na String (type = 2). Druga najpopularniejsza odpowiedź nie zmieniła się wcale. –