Как проверить / перебрать объект в узле? - PullRequest
5 голосов
/ 09 марта 2012

Я получаю результат (объект) из запроса Мангуста и хочу заменить / удалить некоторые ключи, прежде чем я приведу в соответствие объект и отправлю его клиенту.

Когда я console.logобъект, все хорошо (все ключи перечислены, ничего более).Когда я делаю for..in для объекта, скрытые поля выскакивают из ниоткуда (а интересующие ключи - нет).Они имеют смысл - они принадлежат мангусте - но я не хочу их.То же самое происходит при использовании Object.keys или Object.getOwnPropertyNames в Object - всплывающее окно со скрытыми полями, бесполезное.

Поэтому я хотел проверить элемент с помощью util.inspect (obj, true, null, true)и записать результат в консоль.Результат на консоли такой же, как если бы я console.logged объект непосредственно без проверки.

Теперь два вопроса;

  1. Как правильно проверитьобъект, так что я действительно получаю внутреннюю / скрытую информацию об объекте?
  2. Как я могу перебирать объект и получать только поля?(да, я выполняю проверку hasOwnProperty в цикле for..in)

// РЕДАКТИРОВАТЬ

ОК, я понял.После некоторого исследования я понял, что объект mongoose проксирует свои свойства и имеет функцию toJSON, которая объясняет, почему console.logs были в ожидаемой структуре вывода.Решение состоит в том, чтобы использовать собственный метод toObject Mongoose;

mongooseObj.toObject({ getters: true, virtuals: false })

Таким образом, я могу перебирать Object.getOwnPropertyNames и заменять / удалять ключи, о которых клиент не хочет знать!

Ответы [ 2 ]

4 голосов
/ 10 марта 2012

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

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));
});
0 голосов
/ 28 октября 2013

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

Document # get

// path
doc.get('age') // 47

// dynamic casting to a string
doc.get('age', String) // "47"
...