Node.js 显示消息所有者

Node.js 显示消息所有者,node.js,mongodb,node-mongodb-native,Node.js,Mongodb,Node Mongodb Native,请帮助我理解mongodb。 有三个集合:线程、消息和用户 线 { "title" : "1212", "message" : "12121", "user_id" : "50ffdfa42437e00223000001", "date" : ISODate("2013-04-11T19:48:36.878Z"), "_id" : ObjectId("51671394e5b854b042000003") } 信息 { "message" : "text", "image" : null, "t

请帮助我理解mongodb。 有三个集合:线程、消息和用户

线

{ "title" : "1212", "message" : "12121", "user_id" : "50ffdfa42437e00223000001", "date" : ISODate("2013-04-11T19:48:36.878Z"), "_id" : ObjectId("51671394e5b854b042000003") }
信息

{ "message" : "text", "image" : null, "thread_id" : "51671394e5b854b042000003", "user_id" : "516d08a7772d141766000001", "date" : ISODate("2013-04-17T15:58:07.021Z"), "_id" : ObjectId("516ec68fb91b762476000001") }
使用者

如何显示当前线程的所有消息并从users集合获取用户名(用于评论)

此代码仅获取没有用户名的消息

exports.getMessages = function(id, skip, callback) {
var skip = parseInt(skip);

messages.find({thread_id: id}).sort({date: 1}).skip(skip).limit(20).toArray(
    function(e, res) {
    if (e) {
        callback(e)}
    else callback(null, res)
});
};

Node.js和mongo native

通常,mongo使用嵌入文档或引用来维护关系

您当前所做的是在邮件集合中存储对用户集合的手动引用。Mongo手动引用需要额外的查询才能获取引用的数据。在这种情况下,使用基于引用的关系将起作用,但它将强制N+1查询问题。这意味着您必须为希望显示的每条消息加上原始消息查询进行添加查询。一种解决方案是合并,这需要特定语言的驱动程序支持

另一种选择是使用嵌入文档。在这种情况下,您将在messages对象中存储嵌入的相关用户对象。在本例中,您将进行单个查询,该查询将返回所有消息,其中嵌入了每个相关的用户对象。尽管嵌入式文档鼓励重复数据,但在许多情况下,它们提供了性能优势。所有这些信息都在mongo文档中进行了解释,可以详细阅读,以进一步了解mongo的数据建模


此外,该库非常棒,并具有一个有助于参考的功能。

通常,Mongo使用嵌入文档或参考来维护关系

您当前所做的是在邮件集合中存储对用户集合的手动引用。Mongo手动引用需要额外的查询才能获取引用的数据。在这种情况下,使用基于引用的关系将起作用,但它将强制N+1查询问题。这意味着您必须为希望显示的每条消息加上原始消息查询进行添加查询。一种解决方案是合并,这需要特定语言的驱动程序支持

另一种选择是使用嵌入文档。在这种情况下,您将在messages对象中存储嵌入的相关用户对象。在本例中,您将进行单个查询,该查询将返回所有消息,其中嵌入了每个相关的用户对象。尽管嵌入式文档鼓励重复数据,但在许多情况下,它们提供了性能优势。所有这些信息都在mongo文档中进行了解释,可以详细阅读,以进一步了解mongo的数据建模

此外,该库非常棒,有一个功能可以帮助参考。

什么不起作用(看起来你有一个好的开始)?什么不起作用(看起来你有一个好的开始)?
exports.getMessages = function(id, skip, callback) {
var skip = parseInt(skip);

messages.find({thread_id: id}).sort({date: 1}).skip(skip).limit(20).toArray(
    function(e, res) {
    if (e) {
        callback(e)}
    else callback(null, res)
});
};