如何在Mongoose中创建数组引用

时间:2017-08-21 14:15:16

标签: node.js mongodb mongoose mongoose-schema mongoose-populate

这里实际上我想制作包含评级引用数组的服务集合。当用户评价服务而不是元素被推送到包含用户引用,服务ID号和评级的数组中时。

像这样的

Service Model

    var ServiceSchema = new Schema({
      user_id:{
        type: String,
        required: [true, 'please provide user id']
      },
      name: {
        type: String,
        required: [true, 'please enter your name']
      },
      rating : [{ type: Schema.Types.ObjectId, ref: 'rating' }],
    });

Rating schema

    var RatingSchema = Schema({
      S_id :   { type: Schema.Types.ObjectId},
      Rating : Number,
      By  :    { type: Schema.Types.ObjectId}
    });

user schema

    var UserSchema = new Schema({
      id: {
        type: String,
        unique: true,
        required: [true, 'please enter your id']
      },
      password: {
        type: String,
        required: [true, 'please enter your password']
      },
      name: {
        type: String,
        required: [true, 'please enter your name']
      },
      type: {
        type: [{
          type: String,
          enum: ['visitor', 'seller']
        }],
        default: ['visitor']
      },
   });

我已将导出定义为:

    module.exports = mongoose.model('user', UserSchema, 'users');
    module.exports = mongoose.model('service', ServiceSchema, 'service');
    module.exports = mongoose.model('rating', RatingSchema, 'rating');

我想创建一个名为rate的函数,但我不知道如何制作它。

    exports.rate = function(req, res) {
      var curr_service = new Service(req.body, result);
      new_service.save(function(err, service) {
        if (err)
          res.send(err);
        res.json(service);
      });
    };

到目前为止,我已经做到了。

有人可以帮我理解我现在应该做什么吗?因为我还没有找到mongoose在数组中添加引用...

1 个答案:

答案 0 :(得分:0)

就我而言。发生此错误是因为我没有将{es_indexed: true}放在对象声明中,而是将它放在正在使用的对象中。例如:

const Client: Schema({
  name: {type: String, es_indexed: true},
  address: {type: Adress, es_indexed: true} //Wrong, causing error
})

Adress: Schema({ 
  address: {type: String},
  zipCode:  {type: Number}
})

正确的使用方法是将es_indexed: true放入" Adress"架构声明。

const Client: Schema({
  name: {type: String, es_indexed: true},
  address: {type: Adress} //Right way
})

Adress: Schema({ 
  address: {type: String, es_indexed: true},
  zipCode:  {type: Number, es_indexed: true}
})

我希望它有用