因为一个同学的推荐,项目中使用了Mongoose作为MongoDB的接口。在从MongoDB原生Node.js接口转到Mongoose的过程中遇到了一系列问题,记录一下。
一个collection存放多种不同类型数据
由于MongoDB是非关系型数据库,所以按理来说里面塞什么都可以,但是Mongoose里Schema的操作把MongoDB作为一个关系型数据库使用。使用过程中发现可以通过注册多个schema在一个collection里实现同一个collection存放不同数据结构。
var storySchema = Schema({
creator :String,
title : String
});
var paperSchema = Schema({
creator :String,
title : String,
rank : Number
});
//把两个Schema注册到同一个collection-- books
var Story = mongoose.model('Story', storySchema,'books');
var Paper = mongoose.model('Paper', paperSchema,'books');
联合查找
同样是因为node的异步特性和MongoDB的非关系性让联合查找极其困难,不过可以通过populate
函数实现通过ref: 'Model注册名'
预先设定好的外键替换为其他表中的object。
具体可见:
在mongoose中填充外键
总体来说Mongoose还是比较坑的,下一个项目还是用回原生的MongoDB接口吧。。。
网友评论