Задать вопрос
@aivazovski

Как в mongoose сделать свойство-ссылку на существующую коллекцию?

Здравствуйте.
Я хочу с помощью mongoose создать объект "task", который среди прочих будет содержать поле, которое является ссылкой на документ коллекции "user".

Что нужно написать в объекте описывающем схему, что бы при .save() я мог в этом поле указывать id объекта "user" (которые я получу отдельно) ?

const taskScheme = new Schema({
    youtrackID: {
        type: Number,
        default: 0,
    },
    name: {
        type: String,
        required: true,
    },
    text: {
        type: String,
        required: true,
    },
    priority: {
        type: Number
    },
    user:{
        // не знаю как сослаться на элемент существующей в БД коллекции.
    },

});
  • Вопрос задан
  • 3894 просмотра
Подписаться 2 Простой 2 комментария
Решения вопроса 1
@aivazovski Автор вопроса
Разобрался. Надеюсь ответ кому то поможет.
Дока вот тут

Вот код с пояснениями:
const mongoose = require("mongoose");
const Schema = mongoose.Schema;

// подключение
mongoose.connect("******", { useNewUrlParser: true });

//создаём схему и модель для вложенной колекции.
const userScheme = new Schema({
    name: String,
    age: Number
});
const User = mongoose.model("User", userScheme);


//создаём схему и модель для основной колекции.
const taskScheme = new Schema({
    user: [{ type: Schema.Types.ObjectId, ref: 'User' }], //свойство-ссылка на МОДЕЛЬ дочерней коллекции
    text: String
});
const Task = mongoose.model("Task", taskScheme);


//вот так выглядит создание документа со ссылкой на документ из другой коллекции
const task = new Task({
    user: mongoose.Types.ObjectId("5c17505032389130da703ab0"), //_id документа user который нам нужен.
    text: "Task Text Example",
});
task.
save(function(err){
    mongoose.disconnect();  // отключение от базы данных

    if(err) return console.log(err);
    console.log("Сохранен объект", task);
});


//вот так посиск с подзапросом содаржимого дочернего элемента.
Task.
findById("5c17538f570dc7339c732b3b").
populate('user').
exec(function (err, docs) {
    console.log(docs);
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы