Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

320
Views
Cómo actualizar MongoDB sin duplicados

Estoy usando el marco Meteor con Blaze. ¿Cómo puedo obtener datos de una API y solo insertar datos nuevos en mi colección de MongoDB y no duplicados?

  1. Obtención de datos de la API.

     if (Meteor.isServer) { Meteor.methods({ fetchApiData: function () { this.unblock(); return Meteor.http.call('GET','http://jsonplaceholder.typicode.com/posts');},
  2. Insertar datos en la base de datos:

     populateDatabaseApi: function () { Meteor.call('fetchApiData', function(error, result) { myCollection.insert({ //upsert: true, A: result.data.title, B: result.data.userId, C: result.data.id }); }); },

Cuando se usa "myCollection.update" con "upsert: true", obviamente no inserta nuevas entradas. ¿Cuál es la mejor práctica para verificar la API en busca de datos e insertar SOLO entradas nuevas sin duplicados y actualizar las entradas existentes?

Gracias.

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

así es como manejo lo que llamo datos de referencia al inicio. se elimina de los datos JSON. debe elegir un campo que sirva como su "referencia" para cada objeto JSON, para que pueda ver si ya está en la base de datos.

 _.each(ItemData.items, function(q) { check(q, ItemsSchema); Items.upsert({ item: q.item }, { $set: { item: q.item, } }, function(error, result) { if (error) { let errMsg = 'Error while writing item data'; console.error(errMsg, error); throw new Meteor.Error('500', errMsg); } }); });

utilizo un upsert para manejar la inserción frente a la actualización.

over 4 years ago · Santiago Trujillo Report

0

No estoy familiarizado con su marco específico, por lo que no puedo ayudarlo con la sintaxis, pero debería poder encontrar todos los documentos con las mismas propiedades que el documento que está tratando de insertar (debe haber solo uno). Si hay uno, guárdelo usando upsert . Si no lo hay, entonces el objeto que está guardando es único y debe guardar uno nuevo.

over 4 years ago · Santiago Trujillo Report

0

Usando solo Meteor "vainilla", asumiendo que su objeto API tiene identificaciones únicas y que tiene el acceso a datos adecuado (es decir, si el elemento existe findOne lo encontraría), usaría:

 populateDatabaseApi: function () { Meteor.call('fetchApiData', function(error, result) { var item = myCollection.findOne({A : result.data.id}) if(item){ //do nothing, this item already is in the db }else{ myCollection.insert({ A: result.data.title, B: result.data.userId, C: result.data.id }); }); } },
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!