0xS*_*ina 27 javascript mongoose node.js
如何将架构添加到另一个架构?这似乎没有效果:
var UserSchema = new Schema({
name : String,
app_key : String,
app_secret : String
})
var TaskSchema = new Schema({
name : String,
lastPerformed : Date,
folder : String,
user : UserSchema
})
Run Code Online (Sandbox Code Playgroud)
我检查了网站,它显示了如何为数组声明它,但不是单个.
谢谢
glo*_*tho 37
有几种方法可以做到这一点.最简单的就是:
var TaskSchema = new Schema({
name : String,
lastPerformed : Date,
folder : String,
user : Schema.ObjectId
});
Run Code Online (Sandbox Code Playgroud)
然后,您只需确保您的应用正在编写该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
}
}
Run Code Online (Sandbox Code Playgroud)
另一种方法是利用Mongoose的填充功能来简化查询.为此,您可以执行以下操作:
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
});
Run Code Online (Sandbox Code Playgroud)
有了这个,您对所有用户的查询,包括他们的任务数组可能是:
User.find({}).populate('tasks').run(function(err, users) {
// do something
});
Run Code Online (Sandbox Code Playgroud)
当然,这意味着要在两个地方维护ID.如果这困扰你,最好坚持使用第一种方法,并习惯于编写更复杂(但仍然很简单)的查询.
Ben*_*son 11
从 4.2.0 版本开始,猫鼬支持单个子文档。
从文档:
var childSchema = new Schema({ name: 'string' });
var parentSchema = new Schema({
// Array of subdocuments
children: [childSchema],
// Single nested subdocuments. Caveat: single nested subdocs only work
// in mongoose >= 4.2.0
child: childSchema
});
Run Code Online (Sandbox Code Playgroud)
Jam*_*son 10
这个简单的解决方案呢?
var TaskSchema = new Schema({
name : String,
lastPerformed : Date,
folder : String,
user : {
name : String,
app_key : String,
app_secret : String
}
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24612 次 |
| 最近记录: |