2016-06-28 9 views
0

Dieser Meteor-Servercode versucht, die neu erstellte Eigenschaft _id in ein Unterdokument zu kopieren. Dies ist jedoch fehlgeschlagen.Wie speichert man die eigene _id eines Mongo-Dokuments in einem verschachtelten Feld?

Wie kann es gemacht werden?

edit:
Der Code verwendet matb33:collection-hooks.

MyCollection.after.insert(function(userId, doc) { 
    if (doc.element === 'myString') { 
    doc.values[0]._id = doc._id; 
    } 
}); 
+0

Verwenden Sie etwas wie https://github.com/matb33/meteor-collection-hooks? –

+0

@AnthonyAstige Ja. Beitrag aktualisiert. –

+0

Warum nicht eine _id erzeugen, wenn Sie das Dokument einfügen? Dies macht die Ausführung dieser zusätzlichen Abfragen überflüssig. – MasterAM

Antwort

2

die doc in den after Haken matb33:collection-hooks Mutierende keine zusätzlichen Abfragen verursachen ausgeführt werden soll. Sie müssen das Dokument explizit update, wenn Sie dies wünschen.

In diesem speziellen Fall, wenn Sie wirklich das Duplikat _id im Dokument benötigen, können Sie eine _id generieren und beim Einfügen des Dokuments angeben.

Sie können wahrscheinlich verwenden MyCollection._makeNewID() Methode, wie diese API seit ein paar Jahren nicht geändert hat und es ist, was das Mongo Paket intern verwendet.

const _id = MyCollection._makeNewID(); 
const doc = { 
    _id, 
    values: [ 
    { 
     _id, 
     ... 
    }, { 
     ... 
    } 
    ] 
}; 

MyCollection.insert(doc); 
Verwandte Themen