Mongoose踩坑路

三月 21, 2018

报以上错误信息一般是因为 model 里面对应的某个字段xxx是数组,然后在使用xxx.push的时候,就会出现这个错误
比如有以下 model:

const xxxSchema = new mongoose.Schema(
  {
    xxx: [
      {
        name: String,
        kind: String // 字段类型   int boolean string  千万不要写成type了 mmp
      }
    ]
  },
  {
    usePushEach: true,
    versionKey: false // 去掉__v键
  }
);

xxx就是一个数组,为了解决 push 问题,需要加上usePushEach: true这个配置才行
这才能够使用以下的语句进行保存更新

xxxSchema.methods.addField = async function(field) {
  this.fields.push({});
  await this.save();
};
Error:
Assert: command failed: {
	"ok" : 0,
	"errmsg" : "The field 'tag' must be an accumulator object",
	"code" : 40234,
	"codeName" : "Location40234"
} : aggregate failed

造成原因:需要指定_id来作为分组依据:

db.getCollection("movies").aggregate([
  {
    $unwind: "$tags"
  },
  {
    $group: {
      // tags: "$tags",  
      _id: "$tags",    // 这里必须是_id 而不是tags的标志
      count: { $sun: 1 }  // 分组求和
    }
  }
]);