Узел Express MongoDB: Как вычесть одну строку данных из дополнительных опубликованных данных - PullRequest
0 голосов
/ 19 марта 2020

Итак, это то, что я изначально хочу сделать:

  1. Создайте стойку ворот с продолжительностью, которую я хочу занять, чтобы завершить ее.
    • // Завершено
    • Пример: Продолжительность: 4 часа
  2. Добавить прогресс в массив в исходной записи цели
    • / / Завершено
    • Пример: Ход выполнения: 1 час
  3. Вычесть количество времени, введенное в форме прогресса, из общей продолжительности.

    • // Не завершено

      Post: {
       ...,
        {
         duration: 4
        },
         progress: [
            progress1: {
             ...,
        {
            hours: 1
         }
       },
        progress2: {
         ...,
         {
            hours: 2
         }
       ]
      

- Post total duration is updated to 3 as I want to subtract the "1" from hours spent working on a goal.
- Then when added another progress with hours of 2, to subtract that amount as well.

    **Here's my PostSchema:**

`const mongoose = require("mongoose");
    const Schema = mongoose.Schema;

    const PostSchema = new Schema({
      // Reference to user model
      creator: {
        type: Schema.Types.ObjectId,
        ref: "user"
      },
      title: {
        type: String,
        required: true
      },
      desc: {
        type: String,
        required: true
      },
      dura: {
        type: Number,
        required: true
      },
      from: {
        type: Date
      },
      to: {
        type: Date
      },
      completed: {
        type: Boolean,
        default: false
      },
      progress: [
        {
          user: {
            type: Schema.Types.ObjectId,
            ref: 'users'
          },
          text: {
            type: String,
            required: true
          },
          summary: {
            type: String,
            required: true
          },
          hours: {
            type: Number,
            required: true
          },
          date: {
            type: Date,
            default: Date.now
          }
        }
      ]
    });

    module.exports = Post = mongoose.model("post", PostSchema);
    ```

    **Express Logic:**

    ```router.post(
      "/progress/:id",
      [
        auth,
        [
          check("text", "Text is required")
            .not()
            .isEmpty()
        ]
      ],
      async (req, res) => {
        const errors = validationResult(req);
        if (!errors.isEmpty()) {
          return res.status(400).json({ errors: errors.array() });
        }

        try {
          const user = await User.findById(req.user.id).select("-password");
          const post = await Post.findById(req.params.id);
          const newProgress = {
            user: req.user.id,
            text: req.body.text,
            summary: req.body.summary,
            hours: req.body.hours,
            name: user.name
          };

          //--------------------------------------------------//
          // Implement logic to subtract new Progress hours from Post overall hours
          //--------------------------------------------------//

          post.progress.unshift(newProgress);
          await post.save();
          res.json(post.progress);
        } catch (err) {
          console.error(err.message);
          res.status(500).send("Server Error");
        }
      }
    );
`



Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...