Node.js MongoDB:如何通过连接获取数据

Node.js MongoDB:如何通过连接获取数据,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我在mongodb中有以下两个模式 var userSchema = new Schema({ first_name: String, last_name: String, email: String }); var messageSchema = new Schema({ sender: {type: Schema.Types.ObjectId, ref: 'users' }, receiver: {type: Schema.Types.ObjectId, ref:

我在mongodb中有以下两个模式

var userSchema = new Schema({
  first_name:  String,
  last_name: String,
  email:   String
});

var messageSchema = new Schema({
  sender: {type: Schema.Types.ObjectId, ref: 'users' },
  receiver: {type: Schema.Types.ObjectId, ref: 'users' },
  message: String,
  sentOn:   Date,
});

var Users = mongoose.model('users', userSchema);
var Messages = mongoose.model('messages', messageSchema);

如何查询以从“用户”集合中获取所有用户以及从“消息”集合中获取其最后一条消息(单个)?

您可能真的希望通过将“最后一条”或“最后n条”消息存储在
用户
本身来构建此结构。有关更多详细信息,请参阅。除此之外,MongoDB 3.6将允许您有效地执行这样一个
$lookup
结果,该结果在发布时仅返回最新的项目。现在尝试使用它只适用于极少量的消息,您实际上需要加载所有消息,然后丢弃所有消息,但最新消息除外。查看设计要点以了解如何使其更好Hanks Neil感谢您的评论,我更改了db结构您可能真的希望通过将“last”或“last n”消息存储在
用户
本身上来构建此结构。有关更多详细信息,请参阅。除此之外,MongoDB 3.6将允许您有效地执行这样一个
$lookup
结果,该结果在发布时仅返回最新的项目。现在尝试使用它只适用于极少量的消息,您实际上需要加载所有消息,然后丢弃所有消息,但最新消息除外。参见设计要点了解如何使其更好Hanks Neil您的评论,我更改了db结构