Я в ситуации, когда мне нужно сделать 2 вещи:

1) Создайте 50+ коллекций и наполните их документами

2) На основе информации в каждом добавляемом мной документе отредактируйте существующую коллекцию.

Первое использование было первым шагом, который работает нормально. Поскольку я добавлял коллекции в БД, я использовал метод публикации. Теперь мне нужно обновить другую коллекцию, и в этом случае лучше использовать HTTP-метод put или даже patch.

Как правильно подойти к этому? В настоящее время я использую model.findOne и mode.Update, но ничего не обновляется. Мне интересно, связано ли это с тем, что это метод отправки, а не метод размещения

Код: после добавления токенов, который работает, я вызываю функцию

                      // This adding works fine
                      new tokenModel(tokenSchema).save();
                      // This function is handling the update in a different collection
                      addTraitsToGame(tokenData);

А функция такая:

const addTraitsToGame = (tokenData) => {
// Game is another collection I want to update
Game.findOne({ "opensea.game.address": tokenData.asset_contract.address })
  .then(existingGame => {
    if (existingGame) {
      newArrayToReplaceExistingOne= [];
      try {
        // Not really relevant, this is how I fill a new object that will be pushed to the new array
        for (let i = 0; i < someLength; i++) {
          let tokenTrait = tokenData.traits[i];
          let gameTrait = existingGame.opensea.traits.find(trait => trait.type === tokenTrait.trait_type);
          if (gameTrait && gameTrait.form === "values") {
            gameTrait.attributes[tokenTrait['trait_type']] = tokenTrait['trait_count']
            // This is the relevant line, filling up the array with objects
            newArrayToReplaceExistingOne.push(gameTrait);
          }
        }
        // Updating here!
        Game.update(
          { "opensea.game.address": tokenData.asset_contract.address },
          {
            $set: {
              "opensea.game.traits": traitsWithCount
            }
          },
          function (err, user) {
            if (err) return handleError(err);
            else {
              console.log("Update should have been successful");
            }
          }
        );
      }
      catch (err) {
        console.log(err);
      }
    }
  });

}

После этого ничего не обновляется.

0
Contentop 30 Дек 2018 в 14:14

1 ответ

Лучший ответ

Вы также можете использовать

model.findOneAndUpdate({_id:req.body.id},{key you need to update:"updated value"},(req,res)=>{
 your code here.
}

Надеюсь, это поможет.

1
vitomadio 30 Дек 2018 в 11:32