Mon goose вставка идентификатора объекта в массив существующего объекта mongoDB - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть пользователь и объект профиля. В пользовательском объекте внутри него есть переменная-массив с именем profile (предполагается, что объекты профиля хранятся под их идентификационным номером в качестве ссылки). Они оба успешно созданы по отдельности, но когда я пытаюсь добавить профиль в пользователя (по идентификатору объекта) и ищу его в консоли mongodb, он становится пустым.

Соответствующие части кода:

var UserSchema = new mongoose.Schema({
   username: String,
   password: String,
   hasProfile: Boolean,
   profile: [
   {
    type: mongoose.Schema.Types.ObjectId,
    ref: "Profile"
   }
   ]
});

================================================ ========================

var ProfileSchema = new mongoose.Schema({
   name: String,
   location: String,
   profilePic: String,
   photoAlbum: {image: String},
   statusUpdates: {image: String},
   newsFeed: {image: String}
});

================= ==============================================

app.post("/socialNetwork/createProfile", isLoggedIn, function(req,res){
    var currUser = req.user;
    var currUserId = req.user.id;
    var currProfile = req.body.profile;

    Profile.create({
       name: currProfile.name,
       location: currProfile.location
    });

    curUser.profile.push(currProfile.id);
    currUser.save();
});

1 Ответ

0 голосов
/ 20 апреля 2020

Я думаю, что вы должны взять _id недавно созданного профиля, а затем положить sh его в массив профилей у пользователя, этот _id, созданный mongodb, отличается от того, что указано в currProfile.id

* 1003. * так что вы можете добавить функцию обратного вызова для создания нового профиля и затем взять _id добавленного профиля из него
app.post("/socialNetwork/createProfile", isLoggedIn, function(req, res) {
    var currUser = req.user;
    var currUserId = req.user.id;
    var currProfile = req.body.profile;

    Profile.create({
       name: currProfile.name,
       location: currProfile.location
    }, function(err, newProfile) {
        if (err) {
            // handle error
        } else {
            // here we can take the _id from the newProfile and add it to the user
            currUser.profile = currUser.profile || []; // double check the profile array, as if this is the first time to push an item to it
            currUser.profile.push(newProfile._id);
            currUser.save();
        }
    });

});

Обратите внимание, что вы использовали curUser, а не currUser при нажатии profile._id к массиву профилей

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