2017-05-12 5 views
7

Update mit Upsert: True aktualisiert nicht in Express, Mungo?

var logs = [{ 
 
    mobilenumber: '1', 
 
    ref: 3, 
 
    points: 1000, 
 
    ctype: 'mycredit', 
 
    entry: 'sdfsdf', 
 
    entry: 0 
 
}, { 
 
    mobilenumber: '1', 
 
    ref: 6, 
 
    points: 2000, 
 
    ctype: 'mycredit', 
 
    entry: 'sdfsdf', 
 
    entry: 0 
 
}, { 
 
    mobilenumber: '2', 
 
    ref: 7, 
 
    points: 2600, 
 
    ctype: 'mycredit', 
 
    entry: 'sdfsdf', 
 
    entry: 0 
 
}, { 
 
    mobilenumber: '2', 
 
    ref: 15, 
 
    points: -1500, 
 
    ctype: 'mycredit', 
 
    entry: 'sdfsdf', 
 
    entry: 0 
 
}, { 
 
    mobilenumber: '10', 
 
    ref: 15, 
 
    points: 800, 
 
    ctype: 'mycredit', 
 
    entry: 'sdfsdf', 
 
    entry: 0 
 
}, { 
 
    mobilenumber: '11', 
 
    ref: 15, 
 
    points: 110, 
 
    ctype: 'mycredit', 
 
    entry: 'sdfsdf', 
 
    entry: 0 
 
}]; 
 

 
var summary = []; 
 
var positive = 0, 
 
    negative = 0, 
 
    total = 0, 
 
    count = 0; 
 
for (var i = 0; i < logs.length; i++) { 
 
    count = 0; 
 
    positive = 0; 
 
    negative = 0; 
 
    total = 0; 
 

 
    for (var j = i; j < logs.length; j++) { 
 
     if (logs[i].mobilenumber === logs[j].mobilenumber) { 
 
      if (logs[j].points < 0) { 
 
       negative += logs[j].points; 
 
      } else if (logs[j].points >= 0) { 
 
       positive += logs[j].points; 
 
      } 
 

 
      total += logs[j].points; 
 
      count++; 
 
     } 
 
    } 
 
    i += count - 1; 
 
    var obj = { 
 
     mobilenumber: logs[i].mobilenumber, 
 
     positivepoint: positive, 
 
     negativepoint: negative, 
 
     balancepoints: total 
 
    } 
 
    summary.push(obj); 
 
    
 
}

, wenn Sie über Code ausführen Sie Zusammenfassung

Objekte

in i unten Code erhalten versuche Code insert/update aber Einsatz funktioniert, aber es ist nicht

var promiseArr = []; 
for(var i = 0; i<summary.length;i++) { 
    promiseArr.push(saveOrUpdate(summary[i].mobilenumber, summary[i])); 
} 


function saveOrUpdate (phone, dataToUpdate) { 
    return new Promise((resolve, reject) => { 
    //Update document if found or insert otherwise 
    // upsert:true -> If set to true, creates a new document when no document matches the query criteria 

     Summary.update({"mobilenumber": phone}, 
      dataToUpdate, 
      {upsert: true}, 
      function(err, raw){ 
       if (err) 
       { 
        console.log(err); 
       }else 
       { 
        console.log(raw); 
       } 

      }); 
    }); 
} 
Aktualisierung

Hier versuche ich, das Summary-Objekt in der Summary-Collection einzufügen oder zu aktualisieren.

i Handynummer in Summarycollection bin auf der Suche, wenn Handynummer bereits exsist i das Dokument sonst bin zu aktualisieren, ich bin die Schaffung neues Dokument für die Handynummer

Einsatz funktioniert, aber wenn Handynummer bereits ther zusammenfassend Sammlung seiner nicht

Aktualisierung

mir hilft im seit 3 ​​Tagen versucht

ich bin mit Mungo und Datenbank MLab Version 3.2.11

+1

Mögliche Duplikat [Was ist der Unterschied zwischen synchronen und asynchronen Programmierung (in node.js)] (http://stackoverflow.com/questions/16336367/what-is-the-difference-between-synchronous -und-asynchrone-Programmierung-in-Knoten) –

+1

Werfen Sie auch einen Blick auf Async-Modul. https://github.com/caolan/async. Es wird helfen. –

+1

'JSON.stringify (obj)' ist nicht richtig. – robertklep

Antwort

4
var promiseArr = []; 
    for (var i = 0; i < summary.length; i++) { 
     promiseArr.push(saveOrUpdate(summary[i].mobilenumber, summary[i])); 
    } 


    function saveOrUpdate(phone, dataToUpdate) { 
     return new Promise((resolve, reject) => { 

      //Update document if found or insert otherwise 
      // upsert:true -> If set to true, creates a new document when no document matches the query criteria 
      Summary.findOne({ 
       "mobilenumber": phone 
      }, function(err, data) { 
       var newSummary = dataToUpdate; 
       console.log(data); 
       console.log(newSummary); 
       if (data) { 
        newSummary.negativepoint += data.negativepoint; 
        newSummary.positivepoint += data.positivepoint; 
        newSummary.balancepoints += data.balancepoints; 
       } 
       Summary.update({ 
         "mobilenumber": phone 
        }, 
        dataToUpdate, { 
         upsert: true 
        }, 
        function(err, raw) { 
         if (err) { 
          console.log(err); 
         } else { 
          console.log(raw); 
         } 

        }); 

      }); 



     }); 
    } 
4

So nehmen Sie zunächst einen Blick auf diese. What is the difference between synchronous and asynchronous programming (in node.js). Verwenden Sie niemals synchrone und asynchrone Vorgänge an derselben Stelle, ohne genau zu wissen, was vor sich geht.

Lassen Sie uns versuchen, Ihren Code mit Async-Ansatz neu zu schreiben. Lassen Sie uns zunächst Versprechen Methode

function saveOrUpdate (phone, dataToUpdate) { 
    return new Promise((resolve, reject) => { 
    //Update document if found or insert otherwise 
    // upsert:true -> If set to true, creates a new document when no document matches the query criteria 
     Summary.updateOne({"mobilenumber": phone}, 
      {$set : dataToUpdate}, 
      {upsert: true}, 
      function(err){ 
        err ? reject(err) : resolve(); 
      }); 
    }); 
} 

Jetzt nur noch machen Reihe von Versprechungen

var promiseArr = []; 
for(var i = 0; i<summary.length;i++) { 
    promiseArr.push(saveOrUpdate(summary[i].mobilenumber, summary[i])); 
} 

Run Versprechen mit Promise.All und fangen Ergebnisse erstellen.

Promise.all(promiseArr) 
.then((res) => console.log("All done")) 
.catch(err => console.log(err)); 

Mongo Update docs https://docs.mongodb.com/manual/reference/method/db.collection.update/ Mongo updateOne docs https://docs.mongodb.com/manual/reference/method/db.collection.updateOne/

Promises https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise

wenn Sie Mungo als Treiber. Lesen Sie die Dokumentation, um zu sehen, wie Sie Dokument für Abfrage aktualisieren können. http://mongoosejs.com/docs/2.7.x/docs/updating-documents.html

Mongo DB native Treiber können Sie alle neuen Mongo-Funktionen und Methoden verwenden. http://mongodb.github.io/node-mongodb-native/2.2/api/Collection.html

Hoffe, das hilft.

+0

Fehler erhalten Warten ... TypeError: Zusammenfassung.updateOne ist keine Funktion –

+0

Nun. Welchen mongodb-Treiber verwendest du, um DB abzufragen? Welche Version von Mongo? –

+0

Ich empfehle mit diesem http://mongodb.github.io/node-mongodb-native/2.2/api/Collection.html#updateOne –

Verwandte Themen