我有这段代码:
app.get('/notifications/:id', function(req, res) {
Notification.find({
userId: req.params.id
}, '_id type initiatorId', function(err, notifications) {
if (err) return;
// grab all users by the `initiatorId`
});
});
notifications
将如下所示:
[
{
initiatorId: 1
},
{
initiatorId: 2
},
{
initiatorId: 3
}
]
但是,我需要从/users
集合中获取每个initiatorId
的用户详细信息。生成这种结构的最佳方法是什么:
[
{
initiatorId: 1,
user: {
name: 'john'
}
},
{
initiatorId: 2,
user: {
name: 'larry'
}
},
{
initiatorId: 3,
user: {
name: 'moe'
}
}
]
答案 0 :(得分:1)
在通知架构中使用引用,然后根据Mongoose Docs填充它。
var mongoose = require('mongoose'),
Schema = mongoose.Schema,
ObjectId = Schema.ObjectId,
var notificationSchema = new Schema({
initiator: { type: ObjectId, ref: 'User' }
});
var Notification = mongoose.model('Notification', notificationSchema);
然后您可以使用Mongoose的query populate method:
app.get('/notifications/:id', function(req, res) {
Notification
.find({ initiator: req.params.id })
.select('_id type initiatorId')
.populate('initiator')
.exec(function(err, notifications) {
if (err) return handleError(err);
// do something with notifications
});
});
但是,我有点困惑为什么id是用户ID(而不是通知ID) - 如果我使用的API会让我感到困惑。
这不会让你完全你想要的数据结构,但我觉得它更像是“正确”的方式,如果有这样的话。