Node.js 在mongoose中发送文档和子文档数据

Node.js 在mongoose中发送文档和子文档数据,node.js,mongodb,express,mongoose,mongoose-schema,Node.js,Mongodb,Express,Mongoose,Mongoose Schema,我试图以json格式从文档和子文档发送数据,以返回包含userID的请求,该请求可能包含也可能不包含limit(要显示的子文档的数量)、to(日期)和from(日期) 我的模式 const logInfoSchema = new Schema( { description: { type: String, required: true, default: "" }, duration: { type: Number, required: true, def

我试图以json格式从文档和子文档发送数据,以返回包含userID的请求,该请求可能包含也可能不包含limit(要显示的子文档的数量)、to(日期)和from(日期)

我的模式

const logInfoSchema = new Schema(
  {
    description: { type: String, required: true, default: "" },
    duration: { type: Number, required: true, default: 0 },
    date: { type: String }
  },
  { versionKey: false }
);

const userInfoSchema = new Schema(
  {
    username: { type: String, required: true, unique: true },
    count: { type: Number, default: 0 },
    log: [logInfoSchema]
  },
  { versionKey: false }
);
当前代码,与所有日志一起发送数据

app.get("/api/exercise/log", (req, res) => {
  const userId = req.query.userId;
  console.log(userId);
  if (!userId) {
    res.send("enter user id");
  } else {
    userInfo.findById(userId, (err, data) => {
      if (err) {
        return err;
      } else {
        res.json(data);
      }
    });
  }
});

我们可以使用查询运算符查找给定日期之间的日志,并使用
limit
限制结果的数量

app.get("/api/exercise/log", (req, res) => {
    const userId = req.query.userId;
    const from = req.query.from;
    const to = req.query.to;
    console.log(userId);
    if (userId && from && to){

        userInfo.find({_id:userId, "log.date": { "$gt": from, "$lt":to}},
                            {sort: {'date': -1}, limit: 20},(er,data) => {
                                if (err) {
                                   return err;
                                }  
                                else {
                                   res.json(data);
                                 }
                           });
    }
    else{
        if (!userId) {
          res.send("enter user id");
        } else {
          userInfo.findById(userId, (err, data) => {
            if (err) {
              return err;
            } else {
              res.json(data);
            }
          });
        }
      }

  });

我们可以使用查询运算符查找给定日期之间的日志,并使用
limit
限制结果的数量

app.get("/api/exercise/log", (req, res) => {
    const userId = req.query.userId;
    const from = req.query.from;
    const to = req.query.to;
    console.log(userId);
    if (userId && from && to){

        userInfo.find({_id:userId, "log.date": { "$gt": from, "$lt":to}},
                            {sort: {'date': -1}, limit: 20},(er,data) => {
                                if (err) {
                                   return err;
                                }  
                                else {
                                   res.json(data);
                                 }
                           });
    }
    else{
        if (!userId) {
          res.send("enter user id");
        } else {
          userInfo.findById(userId, (err, data) => {
            if (err) {
              return err;
            } else {
              res.json(data);
            }
          });
        }
      }

  });
let logProcessing=(log、to、from、limit)=>{
如果(限值<0){
极限=0;
}
if(日期确认器(收件人)和日期确认器(发件人)){
返回日志
.过滤器(
日期=>新日期(日期[“日期”])>=起始日期和新日期(日期[“日期”])新日期(日期[“日期”])>=起始日期。切片(0,限制);
}else if(日期确认器(to)){
返回log.filter(日期=>新日期(日期[“date”])
let logProcessing=(日志、收件人、发件人、限制)=>{
如果(限值<0){
极限=0;
}
if(日期确认器(收件人)和日期确认器(发件人)){
返回日志
.过滤器(
日期=>新日期(日期[“日期”])>=起始日期和新日期(日期[“日期”])新日期(日期[“日期”])>=起始日期。切片(0,限制);
}else if(日期确认器(to)){

return log.filter(date=>new date(date[“date”])您能显示请求url吗?
/api/exerce/log?userId=5f1a48d64c7a230d91d129c
但可以类似于
/api/exerce/log?userId=333&from=2019-3-13&to=2020-3-13&limit=5
@praxby log我指的是日志数组中的所有元素(参见模式)
{“count”:11,“\u id”:“5f1a48d64c7a1230d91d129c”,“用户名”:“xrahulx”,“日志”:[{“描述”:“fff”,“持续时间”:3”,“id”:“5F1A48D4C7A1230D91D129D”,“日期”:“2019年5月10日星期五”{“描述”:“hhh”,“持续时间”:3”,“id”:“5f1a4a5bdfd648354d80d804”,“日期”:“2020年7月24日星期五”{“描述”:“hh”,“持续时间”:3”,“id”:“5F1A4AD47F725C525A”,“2020年7月24日”{日志、持续时间:3、“_id”:“5f1a4b4f7163d9383ef52f85”、“日期”:“Fri Jul 24 2020”}、{“描述”:“日志”、“持续时间”:3、“_id”:“5f1a4b73b9cc9038873b129f”、“日期”:“Fri Jul 24 2020”}
但我还需要使用限制变量(如果存在)限制从日志返回的元素数to和from不必存在这对您有帮助吗:
db.test.find({u id:userId,“log.date”:{“$gt”:from,$lt”:to},回调)
您可以显示请求url吗?
/api/exerce/log?userId=5f1a48d64c7a1230d91d129c
但是可以像
/api/exerce/log?userId=333&from=2019-3-13&to=2020-3-13&limit=5
@praxby log我是指日志数组中的所有元素(参见模式)
{“count”:11,“\u id”:“5f1a48d64c7a1230d91d129c”,“username”:“xrahulx”,“log”:“{”描述:“fff”,“持续时间”:3,“日期”:“5f1a48df4c7a1230d91d129d”,“日期”:“2019年5月10日星期五”{“描述”:“hhh”,“持续时间”:3”,“日期”:“5f1a4a5bdfd648354d80d804”,“日期”:“2020年7月24日星期五”{“描述”:“hh”,“持续时间”:3”,“日期”:“5f1a4ad52547f937215c529a”,“日期”:“2020年7月24日星期五”{“描述”:“日志”,“持续时间”:3”,“日期”:“F85F1A834D715”,“F715”“:“Fri Jul 24 2020”},{“description”:“log”,“duration”:3,“_id”:“5f1a4b73b9cc9038873b129f”,“date”:“Fri Jul 24 2020”}
但是我还需要限制从日志返回的元素数量,使用限制变量(如果存在)并且它对to和from都不是必需的。这对您有帮助吗:
db.test.find({id:userId,“log.date”:“{$gt”:from,“$lt”:to},回调)