2017-01-07 7 views
0

Я новичок в Монго/Mongoose и у меня возникают проблемы, как выполнить следующую вещь:Добавление/удаление элементов в Мангуста соответственно

Я создаю простое приложение, где он использует Yelp API, чтобы найти ночной клуб/бары вокруг области, где пользователь может искать.

Пользователи представляют список клубов, и каждый список имеет форму для отправки в mongodb, которая может отслеживать других пользователей, зарезервированных для этого конкретного клуба.

Я сделал схему Clubs

const clubSchema = new Schema({ 
    clubID: String, 
    guests: [String] 
}) 

где clubID является ID и гости клуба просто массив строк, которые будут держать след USERNAMES.

Я хочу сделать следующую вещь:

1) Когда конкретный clubID не существует в базе данных, она будет создавать новую и вставить userName в guests

2) Если clubID существует и userName не существует в guests (что означает, что это другой пользователь), он будет толкать userName в guests массив

3) если clubID существует и userName существует в guests, а также, удалить которые userName из guests

Я следующий псевдокод:

exports.UpdateGuestList = function(req, res, next){ 
    const clubID = req.params.clubID; 
    const userName = req.params.userName 
    const userEmail = req.params.userEmail; 

    Club.findOne({ clubID: clubID}, function(err, existingClub){ 
    if (err) { return next(err) ;} 
    // if clubID exist in the data base, check the following 
    if (existingClub){ 
        //1) if the current userName exist, remove it from guests array 
     if (existingClub.guests.includes(userName)){ 
     console.log('Remove guest') 
     } else{   //2) if the current userName doesnt exist, push it into guests aaray 
     console.log('Push in gueest') 
     } 
     return res.send({"message": "done"}) 
    } 

    // If clubID does not exist, create and save clubID 
    const club = new Club({ 
     clubID: clubID, 
     guests: [userName] 
    }) 

    club.save(function(err){ 
     if (err) {return next(err)} 
     res.send({"message": "done"}) 
    }) 
    }) 
} 
+0

что вам нужно? – Codesingh

+0

По существу следуйте логике 1) 2) и 3) – Alejandro

ответ

1

попробовать это:

if (existingClub.guests.includes(userName)){ 

    Club.findByIdAndUpdate(
     clubID, 
     {$pull: {"guests": userName}}, 
     {safe: true, upsert: true, new : true}, 
     function(err, model) { 
      console.log(err); 
     } 
    ); 
} 
else 
{ 
    console.log('Push in gueest') 
    Club.findByIdAndUpdate(
     clubID, 
     {$push: {"guests": userName}}, 
     {safe: true, upsert: true, new : true}, 
     function(err, model) { 
      console.log(err); 
     } 
    ); 

} 

Ура :)

1

Если я понимаю, ваш вопрос правильно, весь ваш код работает по назначению, просто вы хотите знать, как обновлять конкретный клубный вход. Для этого просто измените объект javascript, а затем save().

exports.UpdateGuestList = function(req, res, next){ 
    const clubID = req.params.clubID; 
    const userName = req.params.userName; 
    const userEmail = req.params.userEmail; 

    Club.findOne({ clubID: clubID}, function(err, club){ 
    if (err) {return next(err);} 
    // if clubID exist in the data base, check the following 
    if (club){ 

     if (club.guests.includes(userName)){ 
     //1) if the current userName exist, remove it from guests array 
     const userIndex = club.guests.findIndex(function (guest) { 
      return guest === userName; 
     }); 
     club.guests.splice(userIndex, 1); 
     } else{ 
     //2) if the current userName doesnt exist, push it into guests array 
     club.guests.push(userName); 
     } 

    } else { 
     // If clubID does not exist, create and save clubID 
     club = new Club({ 
     clubID: clubID, 
     guests: [userName] 
     }); 
    } 

    club.save(function(err){ 
     if (err) {return next(err);} 
     res.send({"message": "done"}); 
    }); 
    }); 
}; 

Вы должны также рассмотреть вопрос о включении этого метода в качестве статического метода к вашему объявлению схемы вместо того, чтобы включать этот метод в отдельной библиотеке. См. http://mongoosejs.com/docs/guide.html для более подробной информации. Тогда это может выглядеть примерно так в вашем файле clubSchema:

const clubSchema = new Schema({ 
    clubID: String, 
    guests: [String] 
}); 

clubSchema.statics.UpdateGuestList = function (clubId, userName) { 
    ... 
};