Mongoose CastError字符串

时间:2016-04-19 17:55:56

标签: mongodb mongoose nodes

我的代码一直存在问题。我正在使用mongoose连接mongoDB并存储文档。我正在尝试将日历事件存储到对象数组中。但是当我将数据发送到服务器时,它会显示以下错误:

{ [CastError: Cast to string failed for value "[object Object]" at path "agenda"]
 message: 'Cast to string failed for value "[object Object]" at path "agenda"',
 name: 'CastError',
 kind: 'string',
 value: 
  { type: 'Sessão Plenária',
    vereadores: [Object],
    local: [Object],
    desc: 'SS',
    nome: 'Novo Evento',
    data_horafim: '2016-04-20T07:00:00.000Z',
    data_horainicio: '2016-04-19T19:00:00.000Z' },
 path: 'agenda',
 reason: undefined } }

如果我把它变成一个字符串它可以工作,但在我的模型中它不是一个字符串数组。

var camaraSchema = new mongoose.Schema({
obj_id_usuario: {
    type: String,
    default: ''
},

cidade: String,
estado: String,

endereco: {
    lbl_logradouro: {
        type: String,
        default: ''
    },
    lbl_numero: {
        type: String,
        default: ''
    },
    lbl_complemento:{
      type:String,
      default:'',
    },
    lbl_bairro: {
        type: String,
        default: ''
    },
    lbl_cep: {
        type: String,
        default: ''
    },
},

redesocial: {
    siteoficial: {
        type: String,
        default: ''
    },
    twitter: {
        type: String,
        default: ''
    },
    facebook: {
        type: String,
        default: ''
    },
    email: {
        type: String,
        default: ''
    }
},

agenda:[{
  data_horainicio: Date,
  data_horafim: Date,
  nome:String,
  desc:String,
  local:{
    logradouro: String,
    numero: String,
    complemento: String,
    bairro: String,
    cidade: String,
    estado: String,
    cep: String
  },
  vereadores:[String],
  type: String
}],

mesaDiretora:{
  vereadores:[{
    vereador: String,
    funcao: String,
  }],
  funcoes:[String]
},

setores:[{
  nome: String,
  telefone: String,
  email: String
}],

sessao:[{
  numero: String,
  tipo: String,
  datahora: Date,
  arquivo: String,
}],

tipoSessao:[{
  codigo: String,
  desc: String,
}],

lideranca:[{
  desc: String,
  vereadores: [String],
  lider: String
}],

noticias:[{
  titulo: String,
  assesor: String,
  datahora: Date,
  corpo: String,
  imagem: String,
}],
imagens:[{
  titulo: String,
  foto: String
}],

contrato: {
    obj_id_representante: {
        type: String,
        default: ''
    },
    int_contrato: {
        type: String,
        default: ''
    },
    int_empenho: {
        type: String,
        default: ''
    },
    lbl_licitacao: {
        type: String,
        default: ''
    },

    dt_inicio: Date,

    lbl_periodo: {
        type: String,
        default: ''
    },
    ft_valor: {
        type: Number,
        default: 0
    },
    pc_representante: {
        type: String,
        default: ''
    },
    lbl_observacao: {
        type: String,
        default: ''
    },
    arq_contrato: {
        type: String,
        default: ''
    },
},

telefone: {
    type: String,
    default: ''
},
bl_ativo: {
    type: Boolean,
    default: false
},
lbl_img: {
    type: String,
    default: 'default-user.png'
},
ts_data: {
    type: Date,
    default: Date.now
},

}

NodeJS代码

CamaraModel.findByIdAndUpdate({
      _id: req.body._id
    }, {
      $push: {
          'agenda': req.body.agenda
      }
    }, {
      setDefaultsOnInsert: true
    }, function(err, users) {
      console.log(err);
      res.json(users);
    });

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,我认为这与您如何声明子文档(议程)有关。而不是将对象设置到议程数组(agenda: [{...}])中,而不是documentation

var childSchema = new Schema({ name: 'string' });

var parentSchema = new Schema({
    children: [childSchema]
})

所以在你的情况下:

var AgendaSchema = new mongoose.Schema({
    data_horainicio: Date,
    data_horafim: Date,
    nome:String,
    desc:String,
    local:{
        logradouro: String,
        numero: String,
        complemento: String,
        bairro: String,
        cidade: String,
        estado: String,
        cep: String
    },
    vereadores:[String],
    type: String
});

var camaraSchema = new mongoose.Schema({
    ...,
    agenda: [AgendaSchema],
    ...
});