Tengo un esquema de mangosta definido como
const masterSchema = new mongoose.Schema({ chapter: { type: Number, required: true }, line: { type: Number, required: true }, translations: [ { translation: { type: String, required: true }, }, ], });Estoy tratando de actualizar la colección desde un archivo CSV. La Colección tiene más de 5K documentos.
Data de muestra
[ { chapter: 1, line: 1, translations: [ { translation: "xyz", }, ], }, { chapter: 1, line: 2, translations: [ { translation: "abc", }, ], }, ];El archivo CSV tiene un formato de
chapter,line,translation 1,1,example1 1,2,example2 ....La salida debe ser
[ { chapter: 1, line: 1, translations: [ { translation: "xyz", }, { translation : "example1" } ], }, { chapter: 1, line: 2, translations: [ { translation: "abc", }, { translation : "example2" } ], }, ]Estoy confundido acerca de cómo se usará updateMany() para insertar los datos en el documento correcto. ( si es la forma correcta de resolver el problema )
Asumiendo que el chapter + line no es único, entonces realmente la parte más difícil de este ejercicio es analizar el CSV en primer lugar. CSV tiende a lanzarle sorpresas como material citado, espacios en blanco iniciales y finales no deseados en columnas analizadas, etc., por lo que es bueno usar algo de programación para controlarlo, por ejemplo.
import csv from pymongo import MongoClient client = MongoClient('mongodb://localhost:27017') db = client['testX'] coll = db['foo'] with open('myFile', 'r') as csvfile: reader = csv.reader(csvfile) header = next(reader, None) # capture and skip header line for row in reader: print(row) # for fun # Careful: must turn parsed strings into int to match database type. # Also, strip whitespace from col 2 for safety: coll.update_many({'chapter':int(row[0]),'line':int(row[1])}, {'$push': {'translations':{'translation':row[2].strip()}}})