Как извлечь одну строку из JSON - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь получить документ json с моего mongodb, и после его извлечения извлеките только одно поле с именем «email», чтобы я мог использовать его для отправки электронных писем пользователям

setInterval(()=>{        
            return User.find({email: 'qw@qw'})
                .then(doc => {
                    console.log(doc);
                    console.log(doc.name)
                 })
                .catch(err => {
                    console.log("error")
                })
    }, 5000)

Моя схема :

const
    mongoose                = require("mongoose"),

// MONGOOSE MODEL CONFIGURATION
const UserSchema = new mongoose.Schema({

    email:{
        type: String
    },
    name: {
        type: String,
    },
    phone: {
        type: String,
    }
});

module.exports = mongoose.model('User', UserSchema);

Мой JSON выглядит так:

[ { _id: 5b892cdc060e8d000405d304,
    email: 'qw@qw',
    name: 'john',
    phone: '111111111'
    __v: 0 } ]

console.log(doc.name) возвращено "undefined"

Кто-нибудь может мне помочь, как это сделать правильно?

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Пожалуйста, найдите обновленный ответ. Так как у него есть дополнительные ] в конце, и я указал. Обновление: Mongo db возвращает BSON, преобразует его в действительный формат JSON на уровне API.

Постарайтесь, чтобы все было так, как указано ниже. Я также обновил код ручки.

Исправлено в соответствии с предыдущими комментариями и комментариями Криса Дж.

var json = '[{ "_id": "5b892cdc060e8d000405d304" ,"email": "qw@qw", "name": "john", "phone": "111111111"      }]';
obj = JSON.parse(json);

console.log(obj[0].email);
// expected output: 42

console.log(obj[0].phone);

пример:

var json = '{"result":true, "count":42}';
obj = JSON.parse(json);

console.log(obj.count);
// expected output: 42

console.log(obj.result);
// expected output: true

теперь в вашем случае это недействительный json. Я вижу дополнительные квадратные скобки в конце, большинство ключей не в кавычках.

var json = '{ "_id": "5b892cdc060e8d000405d304" ,"email": "qw@qw", "name": "john", "phone": "111111111"      }';
obj = JSON.parse(json);

console.log(obj.email);
// expected output: 42

console.log(obj.phone);
// expected output: true

Проверьте здесь

https://codepen.io/anon/pen/QVgpwm?editors=1111

0 голосов
/ 04 сентября 2018

Мой JSON выглядит как

[ { _id: 5b892cdc060e8d000405d304,

(Если это действительно JSON, то первое, что вам нужно сделать, это преобразовать его в JavaScript с помощью JSON.parse. Я сомневаюсь, что метод find представляет вам JSON.)

Вы пытаетесь прочитать свойство name объекта, но doc не тот объект.

Посмотрите на [!

Это массив , содержащий этот объект.

Вам нужно извлечь объект из массива (например, с помощью doc[0] или цикла), а затем прочитать свойство name из этого.

Возможно, вы захотите использовать findOne вместо find.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...