首页 > 代码库 > mongoose - 数据关系模型
mongoose - 数据关系模型
**********************
作者: 张启卫
时间: 2017年5月23号
功能: mongoDB 与 mongoose 数据关系模型
* 一对一
* 一对多
* 多对多
**********************
一、嵌入式的(Embed)
1. 添加mongoose模块, 连接数据库
var mongoose = require(‘mongoose‘);mongoose.connect("mongodb://localhost/data_test");
2. 定义users文档
2.1 定义UserSchema
var userSchema = new mongoose.Schema({
email: String,
name: String,
});
2.2 定义User模型
var User = mongoose.model("User", userSchema);
2.3 测试添加User数据
var newUser = new User({ email: "774026263@qq.com", name: "启卫"});
2.4 测试保存数据
newUser.save(function(err, user){ if(err) { console.log(err); } else { console.log(user); }});
2.5 运行保存数据
node embed.js
3. 定义post文档
3.1 定义postSchema
// Post - title, contentvar postSchema = new mongoose.Schema({ title: String, content: String});
3.2 定义Post模型
var Post = mongoose.model(‘Post‘, postSchema);
3.3 测试添加Post数据
var newPost = new Post({ title: "MongoDB数据模型", content: "Embeded && Referencing"});
3.4 测试保存数据
newPost.save(function(err, post){ if(err) { console.log(err); } else { console.log(post); }});
3.5 运行embed.js
node embed.js
4. 一个用户可以有多个post [一对多]
4.1 修改userSchema 数据模型,以嵌入的方式的定义
// Post - title, contentvar postSchema = new mongoose.Schema({ title: String, content: String});var Post = mongoose.model(‘Post‘, postSchema);// User - email, namevar userSchema = new mongoose.Schema({ email: String, name: String, posts: [postSchema]});var User = mongoose.model("User", userSchema);
注意: 这里必须将postSchma定义在userSchema之前,否则userSchema在验证时会报 postSchema 未定义
4.2 定义新的数据
var newUser = new User({ email: "774026263@qq.com", name: "启卫"});
4.3 增加新的post数据
newUser.posts.push({ title: "无法上网", content: "电脑重启过后,无法上网"});
4.4 保存数据至数据库
newUser.save(function(err, user){ if(err) { console.log(err); } else { console.log(user); }});
4.5 运行程序测试
$ node embed.js
{ _id: 5923f3d77ada40113ada1dcf,
email: ‘774026263@qq.com‘,
name: ‘启卫‘,
__v: 1,
posts:
[ { title: ‘无法上网‘,
content: ‘电脑重启过后,无法上网‘,
_id: 5923f3d77ada40113ada1dd0 },
{ title: ‘3 things I really hate‘,
content: ‘codeing, coding, coding‘,
_id: 5923f6d7d4f39e1258d6ebcb } ] }
^C
5. 查找且修改数据
5.1 使用findOne()函数来查找数据
User.findOne({name: "启卫"}, function(err, user) { if(err) { // console.log(err); } else { console.log(user); }});
5.2 执行程序
David@zhangqiweideMacBook-Pro:~/04_web-fullstack/07_Express/DataAssociations$ node embed.js{ _id: 5923f3d77ada40113ada1dcf, email: ‘774026263@qq.com‘, name: ‘启卫‘, __v: 0, posts: [ { title: ‘无法上网‘, content: ‘电脑重启过后,无法上网‘, _id: 5923f3d77ada40113ada1dd0 } ] }^C
5.3 更新查找的数据内容
User.findOne({name: "启卫"}, function(err, user) { if(err) { // console.log(err); } else { // console.log(user); //一旦查找到人,则插入post user.posts.push({ title: "3 things I really hate", content: "codeing, coding, coding" }); user.save(function(err, user) { if(err) { console.log(err); } else { console.log(user); } }); }});
5.4 执行程序
$ node embed.js{ _id: 5923f3d77ada40113ada1dcf, email: ‘774026263@qq.com‘, name: ‘启卫‘, __v: 1, posts: [ { title: ‘无法上网‘, content: ‘电脑重启过后,无法上网‘, _id: 5923f3d77ada40113ada1dd0 }, { title: ‘3 things I really hate‘, content: ‘codeing, coding, coding‘, _id: 5923f6d7d4f39e1258d6ebcb } ] }^C
二、对象引用 (Object References)
1. 初始化数据Schema
var mongoose = require(‘mongoose‘);mongoose.connect("mongodb://localhost/references");// Post - title, contentvar postSchema = new mongoose.Schema({ title: String, content: String});var Post = mongoose.model(‘Post‘, postSchema);// User - email, namevar userSchema = new mongoose.Schema({ email: String, name: String, posts: [ { type: mongoose.Schema.Types.ObjectId, ref: "Post" } ]});var User = mongoose.model("User", userSchema);
注意:在userSchema的posts中, 将type变为ObjectId, 将ref引用写成 Post
2. 使用User.create 测试数据
User.create({ email: "mzhangqiwei@hotmail.com", name: "David"});
3. 运行程序,查看数据库
4. 添加Post.create测试数据
Post.create({ title: "电脑现在已经可以上网了", content: "网络现在已经通畅了"}, function(err, post) { if(err) { console.log(err); } else { // console.log(post); User.findOne({email: "mzhangqiwei@hotmail.com"}, function(err, foundUser) { if(err) { console.log(err); } else { foundUser.posts.push(post); foundUser.save(function(err, data) { if(err) { console.log(err); } else { console.log(data); } }); } }); }});
注意: 首先测试Post.create能否正常将数据插入数据库,然后查找email为mzhangqiwei@hotmail.com的用户,将post数据插入,将保存数据
三、查询数据
- 查找那个用户
- 查找属于那个用户的所有post
//查找用户//查找那个用户的所有postUser.findOne({email: "mzhangqiwei@hotmail.com"}).populate(‘posts‘).exec(function(err, user){ if(err) { console.log(err); } else { console.log(user); }});
mongoose - 数据关系模型
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。