как вызвать данные схемы, которая находится внутри другой схемы(mongodb)

#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,  });  }  }); });  

*** обратите внимание на это. может быть много других способов.