mongoDB中的数据建模 - 社交媒体应用程序

时间:2015-08-31 09:31:49

标签: node.js mongodb mongoose

我正在尝试使用node.js和mongoDB构建某种社交媒体应用。 我有“用户”的mongoose架构,当我在应用程序上呈现一些用户页面时,它还需要显示他的所有帖子/图像/朋友列表等...

现在我有一个用于' UserPost'的mongoose架构并且对于' Image',当我保存图像时,它有一个字段,用于保存上传它的用户的用户名,因此当我渲染用户页面时,它会找到他的所有图像。

这是我第一次与数据库打交道,所以我听说我可能不得不使用参考数据而不是嵌入数据。

有人可以解释我应该如何为我的应用程序组织数据模型?

3 个答案:

答案 0 :(得分:0)

MongoDB是一个NoSql DBMS。这意味着,你不应该在数据字段之间创建引用,因为来自NoSql的性能将被终止:https://en.wikipedia.org/wiki/NoSQL

但是,如果你真的认为你需要参考,请查看:http://docs.mongodb.org/master/reference/database-references/

您可以通过_id引用mongoDB中的数据文档(例如,“Page”=>“createdBy”=“User”=>“_ id”)。

答案 1 :(得分:0)

这取决于您要嵌入的数据类型。 MongoDB根据您使用的存储引擎具有对象大小限制。因此,您应该预测或估计要嵌入的对象的大小。
在此处查看有关限制的更多信息:http://docs.mongodb.org/master/reference/limits/
在此处详细了解参考资料:http://docs.mongodb.org/master/reference/database-references/

答案 2 :(得分:0)

使用mongoose人口处理数据库引用非常小心

定义这样的模式:

var mongoose = require('mongoose')
  , Schema = mongoose.Schema

var userSchema = Schema({
  name    : String,
  posts : [{ type: Schema.Types.ObjectId, ref: 'Post' }]
});

var postSchema = Schema({
  title    : String,
  images   : [{ url: String, filename: String }]
});

var User  = mongoose.model('User', userSchema);
var Post = mongoose.model('Post', postSchema);

根据mongoose population docs,您可以获取所有数据:

User.findOne().populate('posts').exec(function(error, user) {
  console.log(user.posts) // there are populated posts objects inside array
})

不确定,使用单独的集合进行图片上传是个好主意,将它嵌入Post(或用户)中会更简单,但您可以随时为图片添加{ type: Schema.Types.ObjectId, ref: 'Image' }