Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

154
Visualizações
MongoDB altera una matriz de objetos de una lista

Estoy trabajando para mover mi base de datos de sqlite3 a mongo. Fui a la universidad de mongo, pero no estoy seguro de haber encontrado un buen ejemplo de upserting a granel.

Caso de uso : el usuario carga un archivo de datos con una lista de jugadores y sus estadísticas. La aplicación necesita actualizar un jugador o agregar un nuevo jugador si aún no existe.

Implementación actual : la función toma una lista de jugadores y crea una declaración SQL.

 let template = '(Player.Rank, Player.Player_ID, Player.Player, Player.Score, TTP, 1),(Player.Rank, Player_ID, ...) ... (... TTP, 1)'; const stmt = `INSERT INTO playerStats (Rank, Player_ID, Player, Score, TPP, Games_Played) VALUES ${template} ON CONFLICT(Player_ID) DO UPDATE SET Score = Score+excluded.Score, TPP=TPP+excluded.TPP, Games_Played=Games_Played+1`; db.run(stmt, callback);

Espero que cada documento sea una liga que contenga jugadores, juegos y gerentes. Plantilla de documento Mongo DB

 { "LEAGUE_ID": "GEO_SAM", "Players": [ { "id": "PlayerID", "name": "Player", "score": "Score", "rank": "Rank", "xPlayed": "Games_Played", "ttp": "TTP" } ], "Managers": [ {...} ], "Games": [ {...} ] }

Estoy totalmente perdido y no estoy seguro de cómo hacer esto. ¿Necesito crear un bucle y pedirle a mongo que se inserte en cada iteración? He buscado en innumerables ejemplos, pero todos usan valores estáticos codificados.

Aquí está mi ejemplo de prueba.

 const query = { League_id : "GEO_SAM", Players.$.id: $in{ $Players }}; const update = { $inc: { score: $Player.Score}}; const options = { upsert: true }; collection.updateMany(query, update, options);

Tampoco entiendo cómo pasar todo el objeto del jugador para empujarlo a la matriz si no se encuentra el player_id.

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Mi solución fue crear un campo de metadatos que contuviera el ID de la liga con un solo jugador. Si alguien más tiene una solución mejor, me encantaría saber de usted.

 { MetaData: { "LEAGUE_ID": "GEO_SAM"}, Player: { "id": "PlayerID", "name": "Player", "score": "Score", "rank": "Rank", "xPlayed": "Games_Played", "ttp": "TTP" } }

Luego mapeé los valores e inserté cada uno.

 client.connect().then((client) => { const db = client.db(dbName); const results = Players.map((player) => { db.collection('Players').updateOne( { Player_Name: player.Player_ID }, { $setOnInsert: { Player_ID: player.Player_ID, Player: player.Player, Rank: player.Rank, }, $inc: { Score: player.Score, Games_Played: 1, TPP: player.TPP }, }, { upsert: true, multi: true }, ); });
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda