J'ai un objet comme ça
==================records=========={ Id: 5114a3c21203e0d811000088,
userId: 'test',
sUserId: test,
userName: 'test',
url: 'test',
Title: 'test'
}
J'ai besoin d'ajouter un nouveau champ Nom: 'test' à l'enregistrement ci-dessus, j'ai essayé de donner des enregistrements. Nom = nom, cela n'a pas fonctionné.
Aide s'il vous plaît
Merci, Prats
Ceux qui trouvent ce problème, OP a mentionné dans un commentaire ci-dessous la question initiale que la solution à ce problème est:
records.set('Name', 'test')
Ceci ajoute un nouvel attribut appelé Name
ayant la valeur test
.
Je suppose que vous essayez d'ajouter une propriété à un document Mongoose renvoyé pour la réutiliser ailleurs. Les documents renvoyés par Mongoose ne sont pas directement des objets JSON, vous devez les convertir en objet pour leur ajouter des propriétés. Ce qui suit devrait fonctionner:
//... record is a mongoose Document
var r = record.toObject();
r.Name = 'test';
console.log("Record ",r);
Juste utiliser,
var convertedJSON = JSON.parse(JSON.stringify(mongooseReturnedDocument);
et alors,
convertedJSON.newProperty = 'Hello!'
'Bonjour!' peut être n'importe quoi, un nombre, un objet ou un littéral d'objet JSON.
À votre santé! :)
J'ai rencontré un problème similaire et j'espère que mes heures de frustration existentielle aideront les autres dans la même situation. J'avais tendance à croire que les documents renvoyés via Mongoose étaient en lecture seule. Ce n'est en fait pas vrai.
Toutefois, vous ne pouvez pas affecter une propriété à votre document qui ne figure pas également dans votre schéma.
Donc, à moins que votre schéma ait les caractéristiques suivantes:
{
Name: {String}
}
vous serez constamment frustré d'essayer d'attribuer un nom à votre document.
Maintenant, il existe des solutions de contournement dans les réponses ci-dessus qui ont également fonctionné pour moi, mais elles ne vont pas au fond du problème:
myDocument.toObject();
JSON.parse(JSON.stringify(myDocument);
Ceux-ci fonctionneront, mais à mon avis ils cachent juste le problème. Le vrai problème est que Mongoose est plus intelligent que nous ne le pensions et applique votre schéma, comme il se doit.
Ma variante.
Si le schéma est défini avec {strict:false}
, vous pouvez simplement ajouter une nouvelle propriété en
recorcd.newProp = 'newvalue';
Si le schéma est défini avec {strict:true}
, vous pouvez convertir un objet Mongoose en objet comme indiqué précédemment ou utiliser la commande
record.set('newProp','newValue',{strict:false})
Voir http://mongoosejs.com/docs/api.html#document_Document-schema