为什么在Mongoose Schema键的开头不能使用$字符

时间:2019-02-14 16:03:35

标签: node.js mongodb mongoose

我想在Mongoose模式中使用$(从另一应用程序以这种方式格式化数据),如下所示:

const Personal = sequelize.define('profile_personals', {
        ID: {
            type: Sequelize.INTEGER,
            primaryKey: true,
            autoIncrement: true
        },
        biography: {
            type: Sequelize.STRING
        },
        fk_user_id : {type: Sequelize.INTEGER},
    },
    {
        timestamps: false
    });

当我尝试这样做时,并运行该功能(使用PUT路线):

const mySchema = new mongoose.Schema({
  $meta1: {
   type: String,
   trim: true,
  },
  $meta2: {
    type: String,
    trim: true,
  },
  normalKey3: {
    type: String,
    trim: true,
  }
});

我收到以下错误。如果我将$替换为_(例如_meta1),则可以使用。 这是Mongoose还是Mongo问题? $表示什么不起作用?

错误:

exports.updateMe = async (req, res) => {
  const xyz = await MySchema.findOneAndUpdate({normalKey3: req.body.normalKey3}, req.body, 
  {
    upsert: true,
    new: true, 
    runValidators: true
  }).exec();
  res.status(200).json(xyz);
};

1 个答案:

答案 0 :(得分:2)

$是MongoDB中的保留关键字 MongoDB名称有限制

对字段名称的限制 字段名称不能包含空字符。 顶级字段名称不能以美元符号($)开头。 否则,从MongoDB 3.6开始,服务器允许存储包含点(即。)和美元符号(即$)的字段名称。

您可以在此处找到更多信息 访问https://docs.mongodb.com/manual/reference/limits/