Добавьте новый атрибут к существующему объекту json в node.js

У меня есть такой объект

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

Мне нужно добавить новое поле Name: 'test' к вышеуказанной записи, я попытался предоставить записи .Name = name, это не сработало.

Помогает

Спасибо, Пратс

Ответ 1

Те, кто находит эту проблему, ОП упоминают в комментарии ниже оригинального вопроса о том, что решение этой проблемы:

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

Это добавляет новый атрибут Name, имеющий значение test.

Ответ 2

Я предполагаю, что вы пытаетесь добавить свойство к возвращенному Mongoose Document для повторного использования его в другом месте. Документы, возвращенные Mongoose, не являются объектами JSON напрямую, вам нужно будет преобразовать их в объект, чтобы добавить к ним свойства. Должно работать следующее:

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

Ответ 3

Просто используйте

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

и Тогда,

convertedJSON.newProperty = 'Hello!' 

'Hello!' может быть любым, числом, объектом или объектом JSON Object Literal.

Ура!:)

Ответ 4

У меня возникла аналогичная проблема, и надеюсь, что мои часы экзистенциального разочарования помогут другим в той же ситуации. Моя склонность состояла в том, чтобы полагать, что документы, возвращенные через Mongoose, доступны только для чтения. Это на самом деле не так.

Однако вы не можете назначить свойство вашему документу, которое также не входит в вашу схему.

Итак, если ваша схема не имеет следующих значений:

{
    Name: {String}
}

вы будете постоянно разочарованы, пытаясь присвоить имя своему документу.

Теперь в приведенных выше ответах есть обходные пути, которые также работали для меня, но они не попадают в корень проблемы:

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

Они будут работать, но, на мой взгляд, они просто скрывают проблему. Реальная проблема заключается в том, что Mongoose умнее, чем мы поняли, и применяем вашу схему, как и должно быть.

Ответ 5

Если вы загрузили этот объект в records, будут работать как records.Name = "test", так и records['Name'] = "test". Вы либо не загрузили объект правильно, либо ввели в него значение undefined.

Чтобы проверить: добавьте console.log(records.userId), это должно напечатать "тест" на терминале.

Также добавьте console.log(name). Если вы получите ReferenceError: name is not defined, вы, очевидно, не сможете: records.Name = name