2016-08-02 14 views
0

Dieser Meteor-Servercode versucht, jedes Mal innerhalb einer Schleife ein anderes Dokument einzufügen, wenn es nicht existiert upsert, es fügt nur das erste Dokument ein, aber nicht die folgenden, auch wenn sie unterschiedlich sind. Was mache ich falsch? DankDokument einfügen, wenn nicht gefunden

MyCol = new Mongo.Collection('myCol'); 

MyCol.before.insert(function(userId, doc) { 
    doc.userId = userId; 
    doc.createdAt = Date.now(); 
}); 

//the following is inside a loop where C and date changes 
MyCol.upsert({ 
    userId: userId 
}, { 
    $set: { 
    a: 'A', 
    b: 'B', 
    c: C, 
    date: date 
    } 
}); 

Antwort

0

Sie benötigen Abfrage Parameter für Ihre upsert erweitern:

MyCol.upsert({ userId: userId },{ $set: ... }); 

Sie nur einen Parameter in der Abfrage haben: die userId. Da c und date ändern müssen Sie sie in Ihrer Abfrage enthalten auch:

MyCol.upsert({ userId: userId, c: C, date: date }, 
    { $set: { a: 'A', b: 'B', c: C, date: date }}); 

Sie könnten sogar a und b in Ihrer Abfrage enthalten sein müssen, wenn sie ein Teil von dem, was ein Dokument einzigartig macht.

Alternativ können Sie auch .update() mit dem upsert-Flag zu true verwenden:

MyCol.update(query,modifier,{ upsert: true })