2015-02-11 4 views
0

Я пытаюсь обновить схему мангуста. В основном у меня есть два api '/ follow /: user_id' и '/ unfollow /: user_id'. То, что я пытаюсь достичь, - каждый раз, когда пользователь A следует за пользователем B, поле пользователя B-последователей в мангусте будет увеличиваться как единое целое.Обновление полей схемы mongoose одновременно

На данный момент мне удалось получить только следующие поля, увеличивающиеся на единицу, но не на поля последователей.

schema.js

var UserSchema = new Schema({ 
    name: String, 
    username: { type: String, required: true, index: { unique: true }}, 
    password: { type: String, required: true, select: false }, 
    followers: [{ type: Schema.Types.ObjectId, ref: 'User'}], 
    following: [{ type: Schema.Types.ObjectId, ref: 'User'}], 
    followersCount: Number, 
    followingCount: Number 

}); 

Обновленная версия: Я попробовал мое решение, но всякий раз, когда я его, это только выборка данных (я попробовал API на Почтальон хром приложение).

api.js

// follow a user 



apiRouter.post('/follow/:user_id', function(req, res) { 

     // find a current user that has logged in 
      User.update(
       { 
        _id: req.decoded.id, 
        following: { $ne: req.params.user_id } 
       }, 

       { 
        $push: { following: req.params.user_id}, 
        $inc: { followingCount: 1} 

       }, 
       function(err) { 
        if (err) { 
         res.send(err); 
         return; 
        } 

        User.update(
         { 
          _id: req.params.user_id, 
          followers: { $ne: req.decoded.id } 
         }, 

         { 
          $push: { followers: req.decoded.id }, 
          $inc: { followersCount: 1} 

         } 

        ), function(err) { 
         if(err) return res.send(err); 

         res.json({ message: "Successfully Followed!" }); 
        } 

      }); 
    }); 

Эти коды только успевай увеличиваем следующие пользовательские поля, и без дублирования. Как обновить зарегистрированный пользовательский после полей и так же, как и других подписчиков пользователя, в то же время?

Обновленная версия: он продолжает извлекать данные.

enter image description here

ответ

0

Может быть, это, как вы хотите. Вместо использования update вы также можете использовать findOneAndUpdate из запросов Mongoose.

apiRouter.post('/follow/:user_id', function(req, res) { 
    User.findOneAndUpdate(
    { 
     _id: req.decoded.id 
    }, 
    { 
     $push: {following: req.params.user_id}, 
     $inc: {followingCount: 1} 
    }, 
    function (err, user) { 

     if (err) 
      res.send(err); 

     User.findOneAndUpdate(
     { 
      _id: req.params.user_id 
     }, 

     { 
      $push: {followers: req.decoded.id}, 
      $inc: {followersCount: 1} 
     }, 
     function (err, anotherUser) { 
      if (err) 
       res.send(err); 

      res.json({message: "Successfully Followed!"}) 
     }); 

    }); 
} 

Если вы не уверены в том, что обновляется или нет, вы можете просто использовать console.log() для обоих user и anotherUser переменных, чтобы увидеть изменения.

+0

Благодарим за помощь, не работает. Он обновляет только следующие и последующие поля Count, но не последователи и последователи. – sinusGob

+0

проверить обновленную версию, я приложил картинку – sinusGob

+0

Что вы получили, когда вы попробовали 'console.log (user)'? – Khay

Смежные вопросы