Проверить, есть ли в документе mongodb свойство, которое не определено в схеме? - PullRequest
0 голосов
/ 03 июня 2019

Я нахожу документ с мангустом, используя findOne. Мне удалось установить свойство, которое не определено в схеме, для документа с помощью doc.set(key, val). Однако, когда я хочу проверить, имеет ли документ это свойство или нет, он просто показывает «нет», даже если у него есть его.

User.findOne({email: req.user.email})
    .then(user=>{
        if(user.posts){
            //Tried with user.has("posts")=>logs error: .has is not a function
            let posts = user.get("posts");
            posts.push({
                    "Type": "Idea",
                    "Field/s of idea": req.body["Field/s of idea"],
                    "Idea": req.body.idea,
                    "Date": new Date()
                    });
            user.set("posts", posts);
        }else{
            user.set("posts", [{
                    "Type": "Idea",
                    "Field/s of idea": req.body["Field/s of idea"],
                    "Idea": req.body.idea,
                    "Date": new Date()
                    }]
            );
        };
        user.save();
    })
    .catch(err=>{throw err});

Код схемы:

const UserSchema = new Schema({
    _id: {type: ObjectId, auto: true},
    username: {type: String, required: true, max:18},
    email: {type: String, required: true},
    password: {type: String, required: true, min:5},
    date_of_registration: {type: Date, required: true}
}, { strict: false });

1 Ответ

2 голосов
/ 04 июня 2019

Схемы являются фиксированными и не динамическими по конструкции. Если вы не уверены, какой тип posts, добавьте его в свою схему и используйте тип Mixed.

Что-то вроде

const UserSchema = new Schema({
    ...
    posts: [ { type: Mixed, required: false } ]
}, { strict: false });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...