1

我有这个代码:

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每个initiatorIds 的集合中获取用户详细信息。产生这种结构的最佳方法是什么:

[
{
    initiatorId: 1,
    user: {
        name: 'john'
    }
},
{
    initiatorId: 2,
    user: {
        name: 'larry'
    }
},
{
    initiatorId: 3,
    user: {
        name: 'moe'
    }
}
]
4

1 回答 1

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 的查询填充方法

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 会让我感到困惑。

这并不能得到你想要的数据结构,但我认为它更像是“正确”的方式,如果有这样的事情的话。

于 2013-06-26T22:13:02.690 回答