Добавление более одной ссылки на объект в массив в схеме с помощью mongodb / mongoose / node js - PullRequest
0 голосов
/ 21 апреля 2020

все еще новичок, немного смущенный всеми терминами, но очень рад любой помощи.

Я пытаюсь написать intr anet как учебный проект для воображаемой компании, в которой у каждого пользователя есть список задач. Сотрудник более высокого ранга должен иметь возможность отправлять задание из своего списка задач сотруднику более низкого ранга, а также иметь возможность делиться заданием с другими сотрудниками, так сказать, совместным заданием. У меня есть схема задач, подобная следующей:

var mongoose = require("mongoose");

var todoPointSchema = new mongoose.Schema({
   title: String,
   description: String,
   done: {type: Boolean, default: false},
   createdAt: {type: Date, default: Date.now},
   deadline: String,
   isDeviation: {type: Boolean, default: false},
   deviation: {
      type: mongoose.Schema.Types.ObjectId,
      ref: "Deviation"
   },
   owners: 
   [
      {
         type: mongoose.Schema.Types.ObjectId,
         ref: "User"
      }
   ]

});

module.exports = mongoose.model("TodoPoint", todoPointSchema);

Эти задачи затем добавляются в массив в пользовательской схеме, как показано ниже:

var mongoose = require("mongoose");
var passportLocalMongoose = require("passport-local-mongoose");

var UserSchema = new mongoose.Schema({
    firstName: String,
    lastName: String,
    phone: Number,
    username: String,
    created: {type: Date, default: Date.now},
    position: [ { 
            type: mongoose.Schema.Types.ObjectId,
            ref: "Position"
    } ],
    units: [
        {
            type: mongoose.Schema.Types.ObjectId,
            ref: "Unit"
        }
    ],
    posts: [
        {
            type: mongoose.Schema.Types.ObjectId,
            ref: "Post"
        }
    ],
    todoPoints: [
        {
            point: {
                type: mongoose.Schema.Types.ObjectId,
                ref: "TodoPoint"
            },
            sentBy: {
                type: mongoose.Schema.Types.ObjectId,
                ref: "User"
            }
        }
    ],
    password: String,
    picName: {type: String, default: "default.png"},
    active: {type: Boolean, default: false},
    firstTimeActivation: {type: Boolean, default: false},
    showIntro: {type: Boolean, default: true}
});

UserSchema.plugin(passportLocalMongoose);

module.exports = mongoose.model("User", UserSchema);

Проблема заключается в отображении внешнего интерфейса, который массив пуст, хотя кажется, что нет. Я попытался прочитать документацию mongodb, но не могу найти ничего подходящего. Кроме того, как я могу заполнить массив «sentBy» и «point»?

Я пытался выполнить задачу разными способами, последний из которых был таким:

app.post("/todoPoint/currentUser", isLoggedIn, function(req, res) {
    TodoPoint.create(req.body.todoPoint, function(err, newTodoPoint) {
        if(err){
            console.log(err);
        }else{
            newTodoPoint.owners.push(req.user);
            newTodoPoint.createdAt = dateFormat(newTodoPoint.createdAt, "isoDate");
            if(req.body.todoPoint.deadline != ""){newTodoPoint.deadline = dateFormat(newTodoPoint.deadline, "isoDate");}
            newTodoPoint.save();
            User.findById(req.user._id, function(err, foundUser){
                if(err){
                    console.log(err);
                }else{
                    foundUser.todoPoints.push({point: newTodoPoint});
                    foundUser.save();
                    res.redirect("/");
                }
            });
        }
    });
 });

Когда я проверяю коллекцию mongodb, она показывает следующее:

todoPoints: Array
0: Object
_id: ObjectId("5e9eec0654e9d02e2c5bd44b")
point: ObjectId("5e9efb51705514004cb8a8a9")

Извините за очень запутанное объяснение, если вам понадобится какая-либо другая информация, я выложу что-нибудь.

...