本文主要是介绍第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){//处理错误,检查结果
});
这篇关于第7章-使用ORM类库Mongoose提升你的Node.js数据-7.7.嵌套的文档的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!