mongoose 实现DBRef查找所有子类信息

产品表

var Mongoose = require(‘mongoose‘);
var Schema = Mongoose.Schema;

var Product = new Schema({
    image : {
              type : String
          },
    description : {
                      type : String
                  },
    price : {
                type : Number,
                require : true
            },
    probability : {
                      type : Number,
                      require : true
                  },
    status :{
                type : Number,
                require : true,
                default : 1
            },
    categoryId:{
        type:String,
        require:true
    },
    name : {
        type :String,
        require : true
    }
},{
    _id : true,
    autoIndex : true
});

module.exports = Mongoose.model(‘Product‘,Product);

产品分类表

    var Mongoose = require(‘mongoose‘);
var Schema = Mongoose.Schema;

var Category = new Schema({
    child : [{
        type : Schema.Types.ObjectId,
        ref : ‘Product‘
    }],
    name : {
                type : String,
                require : true
           },
    description : {
                type : String,
                require : true
            },
    image : {
                type : String,
                require : true
            }
},{
    _id : true,
    autoIndex : true
});
module.exports = Mongoose.model(‘Category‘,Category);

我们在每添加一个商品的时候把该商品的id插入category中

var product = new Product({
        name : ‘侏罗纪咖啡‘,
        image : ‘/3.jpg‘,
        descript : ‘还算可以‘,
        price : 50.00,
        probability : 100,
        status : 1,
        categoryId : "552f76bd3e0b2dfca7989da3"
    })

    product.save(function(err){
        if(err){
            console.log(err);
        }else{
           Category.find({_id:"552f76bd3e0b2dfca7989da3"},function(err,result){
                result[0].child.push(product._id);
                result[0].save(function(err){
                   console.log(‘ok!‘)
                })
            })
        }
    })

在查找一个分类信息时同时找到它对应的多有商品的信息

Category.find().populate(‘child‘).exec().then(function(result){
        console.log(result);        
    })

我们来看下输出结果:

    [ { _id: 552f76bd3e0b2dfca7989da3,
    image: ‘/1.jpg‘,
    description: ‘我们的咖啡来自巴西,安全无公害,干吃,泡着吃都行‘,
    name: ‘咖啡‘,
    __v: 7,
    child: 
     [ { _id: 552f76a9b396a1e8651bba8d, status: 1 },
       { _id: 552f76ff61d8370ba8490ceb,
         name: ‘暴龙咖啡‘,
         image: ‘/1.jpg‘,
         price: 20,
         probability: 100,
         categoryId: ‘552f76bd3e0b2dfca7989da3‘,
         __v: 0,
         status: 1 },
       { _id: 552f773a12831318a8d51ce4,
         name: ‘剑齿龙咖啡‘,
         image: ‘/2.jpg‘,
         price: 15,
         probability: 100,
         categoryId: ‘552f76bd3e0b2dfca7989da3‘,
         __v: 0,
         status: 1 },
       { _id: 552f776a87443f28a8e66931,
         name: ‘霸王龙咖啡‘,
         image: ‘/3.jpg‘,
         price: 15,
         probability: 100,
         categoryId: ‘552f76bd3e0b2dfca7989da3‘,
         __v: 0,
         status: 1 },
       { _id: 552f777f87443f28a8e66932,
         name: ‘霸王龙咖啡‘,
         image: ‘/3.jpg‘,
         price: 15,
         probability: 100,
         categoryId: ‘552f76bd3e0b2dfca7989da3‘,
         __v: 0,
         status: 1 },
       { _id: 552f77846a87b934a8a45cfa,
         name: ‘翼龙咖啡‘,
         image: ‘/3.jpg‘,
         price: 25,
         probability: 100,
         categoryId: ‘552f76bd3e0b2dfca7989da3‘,
         __v: 0,
         status: 1 },
       { _id: 552f779cad597a3fa8365f63,
         name: ‘小鸡咖啡‘,
         image: ‘/3.jpg‘,
         price: 250,
         probability: 100,
         categoryId: ‘552f76bd3e0b2dfca7989da3‘,
         __v: 0,
         status: 1 },
       { _id: 552f77ac294f5d4ba8006b27,
         name: ‘侏罗纪咖啡‘,
         image: ‘/3.jpg‘,
         price: 50,
         probability: 100,
         categoryId: ‘552f76bd3e0b2dfca7989da3‘,
         __v: 0,
         status: 1 } ] } ] 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。