Как проверять / итерацию над объектом в узле?
-
09-12-2019 - |
Вопрос
Я получаю результат (объект) обратно из запроса в мангели и хочу заменить / удалить несколько клавиш, прежде чем я затрагиваю объект и отправлю его клиенту.
Когда я console.log объект, все приятно (все ключи перечислены, ничего более). Когда я делаю для ... как на объекте, скрытые поля всплывают из ниоткуда (и ключей интереса, не). Они имеют смысл - они принадлежат к мангусе - но я не хочу их. То же самое происходит, при использовании Object.keys или Object.getownPropertynames на объекте - скрытые поля всплывающие, не полезно.
Итак, я хотел проверить элемент с помощью util.inspect (OBJ, True, Null, True) и журнал результата к консоли. Результат на консоли одинаково, как будто я бы с помощью консоли. Открыл объект непосредственно без проверки.
Теперь два вопроса;
- Как правильно проверить объект, чтобы я на самом деле получил внутреннюю / скрытую информацию о объекте?
- Как я могу перейти за объект и только получить поля? (Да, я делаю проверку HASOWNPROPERTY в LOOP FORESHONGE)
// редактировать Хорошо, я получил это. После некоторого расследования я понял, что мангустовый объект проксивает свои свойства и имеет функцию Tojson, которая объясняет, почему Console.logs были в ожидаемой выходной структуре. Решение состоит в том, чтобы использовать собственный метод Mongoosose Hobject;
.mongooseObj.toObject({ getters: true, virtuals: false })
Таким образом, я могу перейти за Object.getowanPropertynames и заменить / удалить ключи, я не хочу, чтобы клиент узнал о!
Решение
Я собираюсь догадаться, что вы смотрите на документ объект , возвращаемый в процессе мангусты, когда вы действительно просто хотитеСмотрите данные.Если мое предположение верно, вы, вероятно, захотите что-то подобное:
.Model.findOne({ name: 'john' }, function (err, doc) {
var data = doc.toObject();
// do whatever you need to with data
delete data.age;
delete data.weight;
data.isAwesome = true;
// now stringify the data and do something with it
callback(JSON.stringify(data));
});
Другие советы
Кроме того, если вы хотите получить доступ к определенным поле из Document Вы можете взглянуть на:
документ # Получить
.// path
doc.get('age') // 47
// dynamic casting to a string
doc.get('age', String) // "47"