创建collection
比如,我需要建立一个collection来存储有关各种建筑领域有关的信息。name代表名称,code代表编码,scope代表领域
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ScopeSchema = Schema(
{
name:{type:String},
code: {type: String},
scope: {type: String}
}
);
//Export model
module.exports = mongoose.model('AllScope', ScopeSchema);
要注意的是这样创建出来的collection实际上在MongoDB中名称是’AllScopes’,
mongoose会自动把你传入的这个参数变成复数
。因此,如果强行不想变成复数的名字,最后一行可以这样写:
module.exports = mongoose.model('AllScope', ScopeSchema, 'AllScope');
避免一个重复的字段—使用virtual
现在AllScope表中有三个字段,如果需要一个url字段代表一个构件的访问地址,这个地址由code和scope字段根据某种规则拼接而成,这种字段我们一般不会再声明schema的时候给出一个url字段,这不利于查出url的错误,也不符合数据库设计理念,这时我们会使用virtual来解决。
ScopeSchema
.virtual('url')
.get(function () {
return '/allscope/' + this.scope+"-"+this.code;
});
拒绝一个colletion中出现重复的元素
当我们有一个关系表时,表中只有两个字段:元素A的ID和元素B的ID。经常我们不希望里面的数据发生重复,如果只要求其中一个字段不重复时很简单,在声明schema时,对应字段加上unique即可。那如果是两个字段合起来不可以重复呢?这时我们需要Unique Index
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var MatchSchema = Schema(
{
ifc:{type:String},
ifd: {type: String}
}
);
MatchSchema.index({ ifc: 1, ifd: 1 }, { unique: true });
这时,如果开始我们的表中什么都没有
insert {ifc:'a', ifd:'b'} //true
insert {ifc:'a', ifd:'c'} //true
insert {ifc:'d', ifd:'b'} //true
insert {ifc:'a', ifd:'b'} //false
查看表中是否有某个元素
CollectionName.find({scope: "a", code: "b"}, function(err, result) {
if(err || !result.length) {
//没找到或者出错了
} else {
//找到了
}
});
注意:不要丢掉err参数哦
版权声明:本文为littleorange6原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。