Можете също така да приложите опциите за времеви клеймове на схема на mongoose към вътрешните схеми.
Например в следната схема приложих timestamps: true
опция за вътрешната схема за офериране.
const mongoose = require("mongoose");
const forumSchema = new mongoose.Schema(
{
title: { type: String, required: true },
biddings: [
{
type: new mongoose.Schema(
{
biddingId: String,
biddingPoints: Number
},
{ timestamps: true }
)
}
]
},
{ timestamps: true }
);
const Forum = mongoose.model("Forum", forumSchema);
module.exports = Forum;
Сега нека го тестваме:
Създадох документ във форума със следния код:
const Forum = require("../models/forum");
router.post("/forums", async (req, res) => {
const result = await Forum.create(req.body);
res.send(result);
});
Тяло на заявката:
{
"title": "Title 1",
"biddings": [
{
"biddingId": "bidding1",
"biddingPoints": 10
},
{
"biddingId": "bidding2",
"biddingPoints": 30
}
]
}
Отговор:(както виждате времевите клейма се прилагат както към родителския, така и към поддокументите)
{
"_id": "5e3073b3a2890b03b029e92c",
"title": "Title 1",
"biddings": [
{
"_id": "5e3073b3a2890b03b029e92e",
"biddingId": "bidding1",
"biddingPoints": 10,
"createdAt": "2020-01-28T17:47:31.376Z",
"updatedAt": "2020-01-28T17:47:31.376Z"
},
{
"_id": "5e3073b3a2890b03b029e92d",
"biddingId": "bidding2",
"biddingPoints": 30,
"createdAt": "2020-01-28T17:47:31.376Z",
"updatedAt": "2020-01-28T17:47:31.376Z"
}
],
"createdAt": "2020-01-28T17:47:31.376Z",
"updatedAt": "2020-01-28T17:47:31.376Z",
"__v": 0
}
Сега нека актуализираме точката за наддаване с _id:5e3073b3a2890b03b029e92e
router.put("/forums/:forumId/biddings/:biddingId",
async (req, res) => {
let points = req.body.points;
try {
let result = await Forum.findByIdAndUpdate(
req.params.forumId,
{
$set: {
"biddings.$[inner].biddingPoints": points
}
},
{
arrayFilters: [{ "inner._id": req.params.biddingId }],
new: true
}
);
if (!result) return res.status(404);
res.send(result);
} catch (err) {
console.log(err);
res.status(500).send("Something went wrong");
}
}
);
URL адресът ще бъде като този:http://.../forums/5e3073b3a2890b03b029e92c/biddings/5e3073b3a2890b03b029e92e
Заявка:(това означава, че искам да актуализирам точките до 50 от наддаването с _id:5e3073b3a2890b03b029e92e
:
{
"points": 50
}
Отговор:(както виждате updatedAt
стойността на полето на актуализираното наддаване се промени автоматично от 2020-01-28T17:47:31.376Z
до 2020-01-28T17:50:03.855Z
)
{
"_id": "5e3073b3a2890b03b029e92c",
"title": "Title 1",
"biddings": [
{
"_id": "5e3073b3a2890b03b029e92e",
"biddingId": "bidding1",
"biddingPoints": 50,
"createdAt": "2020-01-28T17:47:31.376Z",
"updatedAt": "2020-01-28T17:50:03.855Z" ==> UPDATED
},
{
"_id": "5e3073b3a2890b03b029e92d",
"biddingId": "bidding2",
"biddingPoints": 30,
"createdAt": "2020-01-28T17:47:31.376Z",
"updatedAt": "2020-01-28T17:47:31.376Z"
}
],
"createdAt": "2020-01-28T17:47:31.376Z",
"updatedAt": "2020-01-28T17:50:03.855Z",
"__v": 0
}