我处于需要做两件事的情况:
1)创建50多个收藏集并用文档填充它们
2)根据我要添加的每个文档中的信息,编辑一个现有集合。
首先主要用途是可以正常工作的第一步。因为我要向数据库添加集合,所以我使用了post方法。现在,我需要更新另一个集合,在这种情况下,put或patch http方法将更适合。
解决此问题的正确方法是什么?目前,我正在使用model.findOne和mode.Update,但没有任何更新。我想知道这是否是因为它是post方法而不是put方法
代码: 添加有效的令牌后,我调用函数
// 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 :(得分:1)
您也可以使用
model.findOneAndUpdate({_id:req.body.id},{key you need to update:"updated value"},(req,res)=>{
your code here.
}
希望它会有所帮助。