пн goose заполнить в массиве пользовательских объектов - PullRequest
0 голосов
/ 17 марта 2020

В пользовательской модели у меня есть массив пользовательских объектов followPlaylists, который содержит два атрибута (список воспроизведения: идентификатор списка воспроизведения, publi c: чтобы определить, является ли он публикуемым c или нет), как показано ниже

const userSchema = new mongoose.Schema({

   ..... other attributes

  followedPlaylists: [{
    playlist: {
      type: mongoose.Schema.ObjectId,
      ref: 'Playlist',
      unique: true
    },
    public: Boolean
  }]

})

Я хочу заполнить файл followPlaylists.playlist, чтобы ответ был примерно таким:

[{
    playlist: * the actual playlist object *,
    public: true
}]

Надеюсь, мой вопрос достаточно ясен, и спасибо заранее.

1 Ответ

1 голос
/ 18 марта 2020

Здесь я предполагаю, что ваш плейлист работает просто отлично. то есть он имеет элементы и был проверен независимо. Итак, учитывая схему:

Const Playlist = require (./Playlist)//here you have to provide the path to the Playlist model or use mongoose.model (“Playlist”) to bring it in
………….

const userSchema = new mongoose.Schema({

   ..... other attributes

  followedPlaylists: [{
    playlist: {
      type: mongoose.Schema.ObjectId,
      ref: 'Playlist',
      unique: true
    },
    public: Boolean
  }]

})

На том, что вы хотите напечатать, просто сделайте что-то вроде:

Const user = mongoose.model (“User”);//or use require, what fits best your applications
……
Console.log(user.find().populate(“Playlist”))//here is the trick, you ask to populate the Playlist

Пример

Примеры - лучший способ получить концепцию. Вы можете поиграть с этим примером:

//------------------------------------------------------------------
const mongoose = require("mongoose");

const { model, Schema } = require("mongoose");

var dbURI = "mongodb://localhost/mongoose-sample";

const app = require("express")();

mongoose
  .connect(dbURI, { useNewUrlParser: true, useUnifiedTopology: true })
  .then(console.log(`connected to ${dbURI}`));
//----------------------------------------------------------------------

const departmentSchema = new Schema({ name: String, location: String });
const Department = model("department", departmentSchema);

const EmployeeSchema = new Schema({
  firstName: String,
  lastName: String,
  department: { type: mongoose.Types.ObjectId, ref: "department" }
});
const Employee = model("employee", EmployeeSchema);

app.use("/", async (req, res) => {
  //   await Department.remove({});

  // await Department.create({
  //   name: "Fiocruz",
  //   location: "Presidência"
  // }).then(console.log(`we are good`));

  // await Department.create({
  //   name: "IASI",
  //   location: "Roma"
  // }).then(console.log(`we are good`));

  // await Employee.create({
  //   firstName: "Jorge",
  //   lastName: "Pires",
  //   department: await Department.findOne({ name: "Fiocruz" })
  // });

  // await Employee.create({
  //   firstName: "Marcelo",
  //   lastName: "Pires",
  //   department: await Department.findOne({ name: "IASI" })
  // });

  // Employee.findOne("")
  //   .populate("department", "name")
  //   .select("department")
  //   .then(result => {
  //     console.log(result);
  //   });

  await Employee.findOne({ _id: "5e6e28ec480a9d32fc78c46b" }, (err, result) => {
    console.log(result);
  })
    .populate("department", "name")
    .select("department");

  res.json({
    departments: await Department.find(),
    employees: await Employee.find(),
    employeesWithDep: await Employee.find().populate("department", "name"),
    justDepartment: await Employee.findOne({ _id: "5e6e28ec480a9d32fc78c46b" })
      .populate("department", "name")
      .select("department")
  });
});

app.listen(3000, () => {
  console.log("we are on port 3000");
});
...