2016-07-01 7 views
0

Ich habe zwei Sammlungen Order und TabItems. Ich bekomme Array von Order-IDs und ich muss diese IDs Schleife und überprüfen, ob Datensatz in TabItem vorhanden ist. Wenn der Datensatz vorhanden ist, aktualisieren Sie das TabItem, andernfalls erstellen Sie ein neues TabItem. Unten ist mein Code:Aktualisierung oder neue Sammlung im Knoten js

async.each(orders, function(order, done){ 
    TabItem.findOne({order_id: order._id}, function(err, tab){ 
     if(err) { console.log(err)} 
     if(tab != null) { 
     tab.quantity += order.quantity 
     tab.save(function(err){ 
      if(err) { throw err } 
      done(true) 
     }) 
     } 
     else { 
      TabItem.create({order_id: data._id, menu_item_id: each_tab.menu_item_id, quantity: each_tab.quantity}, function(err, tab_item){ 
       if(err){ 

       } 
      }) 
     } 

    }) 
    done(); 
}) 

Server hängt, wenn ich versuche, diese Methode aufzurufen. Kann mir da jemand helfen?

Antwort

1

Versuchen Sie den folgenden Code.

async.each(orders, function(order, done){ 

    TabItem.update({order_id: order._id,menu_item_id:order.menu_item_id},{$inc:{quantity:order.quantity},{upsert:true}}).exec(function(err,result){ 
     if(!err) { 
     console.log('item updated successfully'); 
     done(); 
     } else { 
     done(true); 
     } 
    });  
}); 

Hoffe das hilft Ihnen.

+0

Danke für Hilfe. Was ist mit dem Erstellen, wenn der Datensatz nicht vorhanden ist? – Sunny

+0

siehe '{upsert: true}'. Wenn der Datensatz mit den angegebenen Feldern nicht existiert, würde er selbst den Datensatz einfügen. –