【问题标题】:mongoose populate in array of custom objects猫鼬填充自定义对象数组
【发布时间】:2020-06-28 19:27:14
【问题描述】:

在用户模型中,我有一个自定义对象数组followedPlaylists,其中包含两个属性(播放列表:播放列表的ID,公共:确定是否公开)如下所示

const userSchema = new mongoose.Schema({

   ..... other attributes

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

})

我想在followedPlaylists.playlist 上进行填充,所以响应类似于

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

我希望我的问题足够清楚,并在此先感谢。

【问题讨论】:

    标签: node.js mongodb mongoose mongoose-schema mongoose-populate


    【解决方案1】:

    在这里,我假设您的播放列表运行良好。即,它具有元素并且已经过独立测试。 所以,给定架构:

    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");
    });
    

    【讨论】:

      猜你喜欢
      • 2014-11-25
      • 2021-08-16
      • 2020-11-24
      • 2018-08-03
      • 2014-04-19
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      相关资源
      最近更新 更多