gpt4 book ai didi

javascript - 模式中的 Mongoose 模式

转载 作者:IT老高 更新时间:2023-10-28 22:02:07 27 4
gpt4 key购买 nike

如何将一个架构添加到另一个架构?这似乎无效:

var UserSchema = new Schema({
name : String,
app_key : String,
app_secret : String
})



var TaskSchema = new Schema({
name : String,
lastPerformed : Date,
folder : String,
user : UserSchema
})

我查看了网站,它显示了如何为数组声明它,而不是为单个。

谢谢

最佳答案

有几种方法可以做到这一点。最简单的就是这样:

var TaskSchema = new Schema({
name : String,
lastPerformed : Date,
folder : String,
user : Schema.ObjectId
});

然后您只需要确保您的应用正在写入该 id 并在查询中使用它以在必要时获取“相关”数据。

这在通过用户 id 搜索任务时很好,但在通过任务 id 查询用户时更麻烦:

// Get tasks with user id
Task.find({user: user_id}, function(err, tasks) {...});

// Get user from task id
Task.findById(id, function(err, task) {
User.findById(task.user, function(err, user) {
// do stuff with user
}
}

另一种方法是利用 Mongoose 的 populate简化查询的功能。为此,您可以执行以下操作:

var UserSchema = new Schema({
name : String,
app_key : String,
app_secret : String,
tasks : [{type: Schema.ObjectId, ref: 'Task'}] // assuming you name your model Task
});

var TaskSchema = new Schema({
name : String,
lastPerformed : Date,
folder : String,
user : {type: Schema.ObjectId, ref: 'User'} // assuming you name your model User
});

这样,您对所有用户的查询,包括他们的任务数组可能是:

User.find({}).populate('tasks').run(function(err, users) {
// do something
});

当然,这意味着在两个地方都维护 id。如果这让您感到困扰,最好还是坚持第一种方法,然后习惯于编写更复杂(但仍然足够简单)的查询。

关于javascript - 模式中的 Mongoose 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8737082/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com