wake-up-neo.com

Fügen Sie ein neues Attribut zu einem vorhandenen Json-Objekt in node.js hinzu

Ich habe ein Objekt wie dieses

==================records=========={ Id: 5114a3c21203e0d811000088,
  userId: 'test',
  sUserId: test,
  userName: 'test',
  url: 'test',
  Title: 'test'
}

Ich muss ein neues Feld Name: 'test' zu dem obigen Datensatz hinzufügen.

Hilft bitte

Danke, Prats

20
Prats

Diejenigen, die dieses Problem gefunden haben, erwähnten OP in einem Kommentar unter der ursprünglichen Frage, dass die Lösung für dieses Problem lautet:

records.set('Name', 'test')

Dies fügt ein neues Attribut mit dem Namen Name hinzu, das den Wert test hat.

10
Haywire

Ich gehe davon aus, dass Sie versuchen, einem zurückgegebenen Mongoose-Dokument eine Eigenschaft hinzuzufügen, um sie anderweitig wiederzuverwenden. Von Mongoose zurückgegebene Dokumente sind keine direkten JSON-Objekte. Sie müssen sie in ein Objekt konvertieren, um ihnen Eigenschaften hinzuzufügen. Folgendes sollte funktionieren:

//... record is a mongoose Document
var r = record.toObject();
r.Name = 'test';
console.log("Record ",r);
44
droider

Benutz einfach,

var convertedJSON = JSON.parse(JSON.stringify(mongooseReturnedDocument);

und dann,

convertedJSON.newProperty = 'Hello!' 

'Hallo!' kann alles sein, eine Zahl, ein Objekt oder ein JSON-Objektliteral.

Prost! :)

8
bombayquant

Ich habe ein ähnliches Problem erlebt und hoffe, dass meine Stunden existenzieller Frustration anderen in derselben Situation helfen. Meine Neigung bestand darin zu glauben, dass über Mongoose zurückgegebene Dokumente schreibgeschützt sind. Das stimmt eigentlich nicht. 

Sie können Ihrem Dokument jedoch keine Eigenschaft zuweisen, die nicht auch in Ihrem Schema enthalten ist. 

Es sei denn, Ihr Schema hat Folgendes: 

{
    Name: {String}
}

sie werden ständig frustriert, wenn Sie versuchen, Ihrem Dokument einen Namen zuzuweisen.

Nun, es gibt Problemumgehungen in den Antworten, die auch für mich funktionierten, aber sie kommen nicht an die Wurzel des Problems:

myDocument.toObject();
JSON.parse(JSON.stringify(myDocument);

Diese werden funktionieren, aber meiner Meinung nach verstecken sie das Problem einfach. Das eigentliche Problem ist, dass Mongoose intelligenter ist, als wir erkannt haben, und Ihr Schema wie erzwungen durchsetzen muss.

4
majorobot

Sie können auch die lean () -Methode verwenden, z. const users = await Users.find().lean().exec()

Aus der Mungodokumentation:

Dokumente, die von Abfragen mit aktivierter Lean-Option zurückgegeben werden, sind reine Javascript-Objekte, keine MongooseDocuments. Sie haben keine Sicherungsmethode, Getter/Setter oder andere Mungomagie angewendet

3
Leonardo Dalcin

Meine Variante.

Wenn das Schema mit {strict:false} definiert ist, können Sie die neue Eigenschaft einfach mit hinzufügen

recorcd.newProp = 'newvalue';

Wenn das Schema mit {strict:true} definiert ist, können Sie entweder das Mongoose-Objekt in das zuvor beschriebene Objekt konvertieren oder den Befehl verwenden

record.set('newProp','newValue',{strict:false})

Siehe http://mongoosejs.com/docs/api.html#document_Document-schema

1
venoel