node.js - 猫鼬填充自定义对象数组
问题描述
在用户模型中,我有一个自定义对象数组followedPlaylists,其中包含两个属性(播放列表:播放列表的ID,公共:确定它是否是公共的)如下所示
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
}]
我希望我的问题足够清楚,并在此先感谢。
解决方案
在这里,我假设您的播放列表运行良好。即,它具有元素并且已经过独立测试。因此,给定架构:
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");
});
推荐阅读
- rust - 两个 .await(在同一个异步块或函数中)是否并行执行?
- python - 创建一个脚本列表 tikinter 小部件
- filemaker - 选择下拉列表值时从数据库中选择数据。文件制作器
- javascript - laravel 当我在函数中使用参数时,视图模板会丢失
- c - '选项 « --color=auto » 未被识别
- azure - 无法使用 docker login 登录 ACR
- laravel - Laravel 雄辩的搜索功能
- c - 获取任意操作系统的根目录
- google-analytics - “用户现在按页面”上的 Google Analytic-/null 页面
- c# - 已经执行任务取消时任务仍在运行