#node.js #mongodb #api #express
Вопрос:
У меня есть схема упражнений, которая находится внутри схемы пользователя. Мне нужно вызвать все пользовательские данные userschema и все поля данных схемы извлечения, кроме одного поля, найдя идентификатор пользователя. Я сделал, как показано ниже.
мои схемы,
const exerciseSchema = new Schema({ description: String, duration: Number, date: Date }); const Exercise = mongoose.model("Exercise", exerciseSchema); const userSchema = new Schema({ username: { type: String, unique: true }, logs: [exerciseSchema] }); const User = mongoose.model("User", userSchema);
мой api,
app.get("/api/users/:_id/logs", (req, res) =gt; { let _id = req.params._id; User.findById(_id, (err, data) =gt; { if (!err) { data.count = data.logs.length; res.json({ username: data.username, _id: data._id, count: data.count, log: data.logs }) } }) })
и мое возвращение должно быть следующим.
{ username: "test", count: 1, _id: "5fb5853f734231456ccb3b05", log: [{ description: "test", duration: 60, date: "Mon Jan 01 1990", }] }
но мое возвращение ниже
{ "username":"imangi", "_id":"61795a3f15a4944e134393a4", "count":3,"log":[{"description":"tennis", "duration":30, "date":2021-03-15T00:00:00.000Z, "_id":"61795a5315a4944e134393a6"} ]}
все, что мне нужно сделать, это избавиться от идентификатора и перевести дату в локальный формат. поскольку я все еще ученик, я немного новичок в этом. кто-нибудь может помочь?
Ответ №1:
Как я мог понять ваш вопрос, если вам не нужен идентификатор входа в ответ.
вы можете просто сделать это следующим образом. с помощью удаления
const array = [ { id: "dsdsd", description: "test", duration: 60, date: "Mon Jan 01 1990", }, { id: "abcd", description: "test", duration: 60, date: "Mon Jan 01 1990", }, ]; const newArray = array.map(function (item) { delete item.id; return item; }); console.log(newArray);
результатом этого было бы,
[ { description: 'test', duration: 60, date: 'Mon Jan 01 1990' }, { description: 'test', duration: 60, date: 'Mon Jan 01 1990' } ]
так что, объединив все вместе, мы сможем сделать это вот так.
app.get("/api/users/:_id/logs", (req, res) =gt; { let _id = req.params._id; User.findById(_id, (err, data) =gt; { if (!err) { data.count = data.logs.length; const modifiedLogs = data.logs.map(function (item) { delete item.id; return item; }); res.json({ username: data.username, _id: data._id, count: data.count, log: modifiedLogs, }); } }); });
*** обратите внимание на это. может быть много других способов.