#arrays #json #mongodb #mongoose #put
#массивы #json #mongodb #мангуст #поместить
Вопрос:
Прошу прощения, если это дублирующий вопрос, мой мозг немного перегрелся от просмотра стольких разных статей и попыток сделать разные вещи.
Используя mongoose, в настоящее время я пытаюсь создать маршрут PUT, который может принимать массив объектов и заменять всю коллекцию новым набором данных.
Там, где я вызываю findOneAndUpdate()
функцию в маршруте put, я попытался использовать эту save()
функцию. Но когда я делаю это, вместо того, чтобы заменять существующие данные тем, чем я пытаюсь их заменить, он просто добавляет объекты в коллекцию в качестве новых элементов и сохраняет существующие данные. findOneAndUpdate()
ничего не делает, а затем console.log(stats);
срабатывает.
Вот мой запрос на размещение в файле маршрута:
router.put("/", async (req, res) => {
const { PassingTouchdowns, PassingYards, PlayerID, Receptions, ReceivingTouchdowns, ReceivingYards, RushingTouchdowns, RushingYards, Week } = req.body;
const statsField = {};
if(PassingTouchdowns) statsField.PassingTouchdowns = PassingTouchdowns;
if(PassingYards) statsField.PassingYards = PassingYards;
if(PlayerID) statsField.PlayerID = PlayerID;
if(Receptions) statsField.Receptions = Receptions;
if(ReceivingYards) statsField.ReceivingYards = ReceivingYards;
if(RushingTouchdowns) statsField.RushingTouchdowns = RushingTouchdowns;
if(RushingYards) statsField.RushingYards = RushingYards;
if(Week) statsField.Week = Week;
try {
let playerid = await PlayerGameStatsByWeek.find({ PlayerID });
newStats = new PlayerGameStatsByWeek({
statsField
});
//For Adding multiple objects
req.body.forEach(function(obj) {
var stats = new PlayerGameStatsByWeek(obj);
PlayerGameStatsByWeek.findOneAndUpdate(
playerid,
{ $set: stats },
{ new: true }
);
console.log(stats);
});
res.send({ msg: "Stats Updated!" });
} catch (err) {
console.error(err.message);
res.send({ msg: "Server Error" })
}
});
Вот моя модель:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const PlayerGameStatsByWeekSchema = Schema(
[{
PassingTouchdowns: String,
PassingYards: String,
PlayerID: String,
Receptions: String,
ReceivingTouchdowns: String,
ReceivingYards: String,
RushingTouchdowns: String,
RushingYards: String,
Week: String
}]
);
const Stats = module.exports = mongoose.model('stats', PlayerGameStatsByWeekSchema);
module.exports.getPlayerGameStatsByWeek = function(callback, limit) {
Stats.find(callback).limit(limit)};
Вот небольшой пример того, что я хотел бы добавить в запрос PUT:
[
{
"PassingTouchdowns": "0",
"PassingYards": "0",
"PlayerID": "123456",
"Receptions": "6.8",
"ReceivingTouchdowns": "0",
"ReceivingYards": "0",
"RushingTouchdowns": "8.5",
"RushingYards": "900.8",
"Week": "1"
},
{
"PassingTouchdowns": "1",
"PassingYards": "14",
"PlayerID": "987654",
"Receptions": "2.5",
"ReceivingTouchdowns": "4",
"ReceivingYards": "30",
"RushingTouchdowns": "0",
"RushingYards": "0",
"Week": "2"
}
]
Ответ №1:
Чтобы заменить всю коллекцию данными, вам лучше использовать агрегации mongodb, этап $out https://docs.mongodb.com/manual/reference/operator/aggregation/out /