关于Mongoose的小知识

创建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参数哦

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值