2017-11-24 1 views
1

Ich versuche einfach, etwas einfach mit Mongo zu tun, aber es funktioniert nicht:Upsert Daten mit einem dynamischen Feldnamen

Ich mag Daten in einem Objekt UPSERT wie: module.xxx.yyy dann habe ich versucht, viele Dinge wie:

UsersRights.upsert({ 
 
\t condoId: condoId, 
 
\t userId: manager._id, 
 
}, { 
 
\t condoId: condoId, 
 
\t userId: manager._id, 
 
\t module: { 
 
\t \t [defaultRight.xxx] : { 
 
\t \t \t [defaultRight.yyy] : defaultRight.default 
 
\t \t } 
 
\t } 
 
});

aber wenn ich eine neue xxx oder ein neues yyy hinzufügen möchten, wird es gelöscht und die gesamte module Objekt ersetzen und kein t nur einen neuen Schlüssel hinzufügen.

Ich habe auch versucht dies:

UsersRights.upsert({ 
 
\t condoId: condoId, 
 
\t userId: manager._id, 
 
}, { 
 
\t condoId: condoId, 
 
\t userId: manager._id, 
 
\t ["module." + defaultRight.module + "." + defaultRight.right] : defaultRight.default, 
 
});

aber der Server zeigen Sie mir einen Fehler wie: MinimongoError: Key module.xxx.yyy must not contain '.'

Antwort

1

Sie müssen das folgende Formular verwenden:

YourCollection.upsert({ 
    _id: id, (can be other selectors as well) 
}, { 
    $set: setter 
}); 

Setter ist ein Objekt y ou erstellen, bevor und sollte folgende Form haben:

const setter = {}; 
setter[`${#1Level}.${#2Level}`] = data; 

Wo #1Level & #2Level sind Vars die Felder zu benennen Sie ändern möchten oder hinzuzufügen.

Verwandte Themen