2016-06-20 6 views
0

Ich möchte ein neues Dokument erstellen, wenn es nicht existiert und das neue Dokument zurückgeben, wenn das Dokument bereits erstellt wurde existiert Ich möchte, dass eine Ausnahme ausgelöst wird.Wie man ein neues Dokument 'wenn nicht existiert' erstellt und das neue Dokument mit MongoDB NodeJS nativem Treiber zurückgibt

Ich denke, die Art, wie ich das tue, scheint hackisch, gibt es ein besseres Mittel, dies zu tun?

var query = { name: 'guaranteed to be unique' } 
var new_doc = { ... } 
var col = // the Mongo collection we're using 

col.updateOne(
    query, 
    new_doc, 
    {upsert: true} 
) 
.then(update => col.findOne({_id, update.result.upserted.pop()._id})) 
.then(doc => console.log(doc)) 
.catch(exception => console.log('that already exists')) 
+1

Hängt, wenn Sie es wollen, aktualisieren, wenn es vorhanden ist gefunden? Wenn ja, könntest du 'upsert: true}' on 'update' verwenden. Sonst hast du es richtig gemacht. –

+0

Warum haben Sie keinen eindeutigen Index für 'name'? – robertklep

+0

@robertklep, könnten Sie erklären, wie ein eindeutiger Index das lösen würde? – MatUtter

Antwort

0

Nach viel ein suchender ich einige answers in this post, aber hier ist ein sauberes Beispiel mit findOneAndUpdate und die returnOriginal Eigenschaft false

col.findOneAndUpdate(
    query, 
    new_doc, 
    { upsert: true, returnOriginal:false } 
) 
.then(update => update.value) 
.then(doc => console.log(doc)) 
+0

Beachten Sie, dass alle Eigenschaften in 'new_doc' die Eigenschaften in der Datenbank überschreiben, wenn das Dokument bereits existiert. – robertklep