我有课
@Data
@NoArgsConstructor
@AllArgsConstructor
@Document("animal")
public class Animal {
private String id;
private boolean isBirthYear;
}
我想将课程更新为:
@Data
@NoArgsConstructor
@AllArgsConstructor
@Document("animal")
public class Animal {
private String id;
private long isBirthYear;
}
不关心代码约定。我想编写一个迁移来将 mongodb 中的数据从布尔型转换为长型。
我尝试创建一个新班级
@Data
@NoArgsConstructor
@AllArgsConstructor
@Document("animal")
public class AnimalV2 {
private String id;
private long isBirthYear;
}
但我认为这不是一个好的解决方案。
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import org.bson.Document;
public class AnimalMigration {
public static void main(String[] args) {
try (var mongoClient = MongoClients.create("your-mongodb-connection-string")) {
var database = mongoClient.getDatabase("your-database-name");
var collection = database.getCollection("animal");
// Get all documents in the collection
try (var cursor = collection.find().iterator()) {
while (cursor.hasNext()) {
var document = cursor.next();
// Convert boolean to long for the isBirthYear field
if (document.containsKey("isBirthYear")) {
var isBirthYear = document.getBoolean("isBirthYear");
document.put("isBirthYear", isBirthYear ? 1L : 0L);
}
// Save the updated document back to the collection
collection.replaceOne(new Document("_id", document.getObjectId("_id")), document);
}
}
}
}
}