2017-02-13 2 views
1

У меня есть следующий маршрут:Создание документа и добавление установить в том же маршруте

app.post('/accounts', (req, res) => { 
    obj = new ObjectID() 

    var account = new Account({ 
    name: req.body.name, 
    _owner: req.body._owner 
    } 
) 

    return account.save() 

    .then((doc) => { 
     Account.update(
     { 
      "_id": account._id 
     }, 
     { 
      $addToSet: { 
      subscriptions: obj 
      } 
     } 
    ) 
    }) 
    .then((doc) => { 
     res.send(doc) 
    } 
) 
}); 

Я пытаюсь создать документ, а затем обновить поле в нем (массив) с созданной ObjectId. Когда я вызываю этот маршрут, создается новый документ, однако новый идентификатор объекта не добавляется к набору подписки.

Вот моя модель:

var Account = mongoose.model('Account', { 
    name: { 
    type: String, 
    required: true, 
    minlength: 1, 
    trim: true 
    }, 
    _owner: { 
    type: mongoose.Schema.Types.ObjectId, 
    required: true 
    }, 
    subscriptions: [{ 
    type: mongoose.Schema.Types.ObjectId, 
    required: true 
    }] 
module.exports = { 
    Account 
}; 
+0

Нового _id будет объект документа возвращается после того, как account.save –

+0

Проблемы не получая _id - у меня есть идентификатор и передаю его на обновление, однако обновление не работает. – dwax

ответ

3

если вы нашли идентификатор и подписки является массив, то

app.post('/accounts', (req, res) => { 
     obj = new ObjectID() 

     var account = new Account({ 
     name: req.body.name, 
     _owner: req.body._owner 
     }); 

     return account.save() 
     .then((doc) => { 
      return Account.update(   //return was missing which was causing the issue because of promise chain 
      { 
       "_id": account._id 
      }, 
      { 
       $addToSet: { 
       subscriptions: obj 
       } 
      } 
     ) 
     }).then((doc) => { 
      res.send(doc) 
     } 
    ) 
    }); 
+0

$ push wiill добавить значение, если оно существует или нет. В соответствии с документами AddToSet также следует добавлять к массиву - но только если значение не существует: https://docs.mongodb.com/manual/reference/operator/update/addToSet/ – dwax

+0

Я тоже пробовал $ push, и он не обновляется. – dwax

+0

Нет, он не будет проверять, существует ли она, но одна вещь, которую вы можете сделать, это проверить мой обновленный ответ. –

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

  • Нет связанных вопросов^_^