Поиск и обновление записи - Mongoose - PullRequest
1 голос
/ 29 января 2020

Я создаю API для хранения имен друзей для игры, я создал API для получения запроса на публикацию следующим образом:

exports.addFriends = async (req, res) => {
  try {
    console.log('hit');
    console.log(req.body.friendNames);
    const addUser = await User.updateOne(
      { uniqueid: req.body.uniqueid },
      { $push: { friendNames: [req.body.friendNames] } }
    );
    res.json({
      addUser
    });
  } catch (error) {
    console.log(error);
  }
};

и запрос на публикацию в виде

      const friends = await axios.post('/api/v1/users/add/friends', {
          uniqueId: this.uniqueid,
          friendNames: [
            {
              userName: 'test',
              region: 'euw'
            }
          ]
        });

Мой API работает как журнал, но запись не производится. Моя пользовательская схема выглядит так:

const userSchema = new mongoose.Schema({
  uniqueid: {
    type: String,
    required: true,
    trim: true
  },
  summonerName: {
    type: String
  },
  friendNames: [
    {
      userName: String,
      region: String
    }
  ]
});


Я не получаю сообщение об ошибке, и, кажется, запрос до go выполнен, но записи не добавлены. Есть идеи?

1 Ответ

1 голос
/ 29 января 2020

$ pu sh используется для добавления одного элемента в массив. Но используя оператор обновления массива $ каждый , мы можем получить массив элементов sh.

Кроме того, я использовал findOneAndUpdate с параметром new:true для получения обновленного документа, потому что updateOne не возвращает обновленный документ.

exports.addFriends = async (req, res) => {
  try {
    console.log(req.body.friendNames);

    const addUser = await User.findOneAndUpdate(
      { uniqueid: req.body.uniqueid },
      { $push: { friendNames: { $each: req.body.friendNames } } },
      { new: true }
    );

    res.json({ addUser });
  } catch (error) {
    console.log(error);
    res.status(500).send("Something went wrong");
  }
}

Допустим, у нас есть этот существующий документ:

{
    "_id": "5e31c749f26d5f242c69f3aa",
    "uniqueid": "uniqueid1",
    "summonerName": "John",
    "friendNames": [
        {
            "_id": "5e31c749f26d5f242c69f3ab",
            "userName": "Max",
            "region": "Germany"
        }
    ],
    "__v": 0
}

Давайте отправим запрос контроллеру с этим телом запроса:

{
    "uniqueid": "uniqueid1",
    "friendNames": [
        {
            "userName": "Andrew",
            "region": "England"
        },
        {
            "userName": "Smith",
            "region": "USA"
        }
    ]
}

Ответ будет таким:

{
    "addUser": {
        "_id": "5e31c749f26d5f242c69f3aa",
        "uniqueid": "uniqueid1",
        "summonerName": "John",
        "friendNames": [
            {
                "_id": "5e31c749f26d5f242c69f3ab",
                "userName": "Max",
                "region": "Germany"
            },
            {
                "_id": "5e31c763f26d5f242c69f3ad",
                "userName": "Andrew",
                "region": "England"
            },
            {
                "_id": "5e31c763f26d5f242c69f3ac",
                "userName": "Smith",
                "region": "USA"
            }
        ],
        "__v": 0
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...