繁体   English   中英

MongoDB中的一对多关系

[英]One-To-Many relation in MongoDB

目前,我正在查看mongoDB。 我尝试使用nodejs和mongoose实现一个简单的一对多关系:

模型/架构用户:

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

var UserSchema = new Schema({
    name: String
});

module.exports = mongoose.model('User', UserSchema);

模型/架构文章:

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

    var ArticleSchema = new Schema({  
        name: {
            type: String,
            required: true
        },  
        user: {
            type: Schema.ObjectId,
            ref: 'User'
        }   
    });

    module.exports = mongoose.model('Article', ArticleSchema);

所以,我现在的问题是:如何获得所有用户,包括其文章? 我真的也必须向我的UserScheme添加引用吗? 这样的一对多关系中的最佳实践是什么? mongodb中是否有类似join的东西?

一个用户有很多文章-一篇文章属于一个用户。 调用类似/ user /:user_id之类的东西,我想接收包含_id = user_id且包含其所有文章的用户。

由于种种原因,这是最可怕的想法。

首先,BSON文档大小限制为16MB。 您根本无法在文档中添加更多内容。 与“一对多”关系相比,嵌入文档更适合“一对(很少)”关系。

至于用例:您在这里有什么问题? 它是

对于给定的用户,文章是什么?

在REST方面,仅应在/users/:id/articles被获取时返回文章,并且应将文章(仅文章)作为JSON数组返回。

因此,您的模型似乎很自然。 对于用户:

{
  _id: theObjectId,
  username: someString
  …
}

文章应如下所示:

{
  _id: articleIdOrSlugOrWhatever,
  authors: [theObjectId],
  // or author: theObjectId
  retention: someISODate,
  published: someOtherISODate
}

因此,当为/users/:id调用REST服务时,您只需查找

var user = db.users.findOne({_id:id})

/users/:id/articles被调用时,您将进行查找

var articles = db.articles.find({author:id})

遵循REST原则,以可扩展的方式解决问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM