第7章-使用ORM类库Mongoose提升你的Node.js数据-7.7.嵌套的文档

往NoSQL数据库中存储模型很适合使用嵌套的文档。
例如:我们可以使用一个单独的集合(users)代替两个集合(posts和users),这个单独集合中的每一项都包含posts

决定是使用分开的集合还是嵌套的文档不止是一个代码结构的问题,这个问题的答案取决于用途。
例如:如果posts只是在users的上下文中用到,那么最好用嵌套的文档。
然而,如果博客里多个posts需要独立于他们的users上下文被查询,那么将集合分离会比较合适。

要使用嵌套文档,我们可以在Mongoose的原型中(例如:bookSchema或者postSchema)使用Schema.Types.Mixed这个类型,或者,我们可以为嵌套的文档创建一个新的原型。
前者的示例如下:

var userSchema = new mongoose.Schema({
    name: String,
    posts: [mongoose.Schema.Types.Mixed]
});

//绑定方法、钩子等

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

然而,后一种使用新的不同的子原型的方法更加灵活和强大:

var postSchema = new mongoose.Schema({
    title: String,
    text: String
});

// post原型的其他方法、钩子等写在这里

var userSchema = new mongoose.Schema({
    name: String,
    posts: [postSchema]
});

// user原型的其他方法、钩子等写在这里

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

如果想把post嵌套进一个新建或已经存在的user文档中,可以将posts这个属性当作一个数组对象,然后使用JavaScript/Node.js API中的push方法,或者用MongoDB的$push操作符。
如下所示:我们可以通过ID(用户ID:_id)来查找一个user对象,然后给他增加一个post(newPost):

User.update(
    {_id: userId},
    {$push: {posts: newPost}},
    function (error, results){
    //处理错误,检查结果
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值