MongoDB 40415: BSON 字段 'create.bsonType' 是未知字段

MongoDB 40415: BSON field 'create.bsonType' is an unknown field

我试图在 MongoDB 中使用验证器创建一个集合,但遇到了一个奇怪的错误。

这就是我在控制器中尝试做的事情:

import { orderValidator } from 'db/validator'

await db.createCollection('orders', orderValidator)
console.log('collection orders created')

这是验证器文件的内容:

module.exports = {
  bsonType: 'object',
  required: ['buyer_id', 'seller_id', 'insta_id', 'time', 'posts', 'price', 'total'],
  properties: {

    buyer_id: { bsonType: 'objectId' },

    seller_id : { bsonType: 'objectId' },

    insta_id: { bsonType: 'objectId' },

    category: {
        bsonType: 'string',
        maxLength: 1000
      },

    with_bio : { bsonType: 'bool' },

    bio_url: {
        bsonType: 'string',
        maxLength: 65535
      },

    swipe_up_url: {
        bsonType: 'string',
        maxLength: 65535
      },

    start_from: { bsonType: 'date' },

    caption: {
        bsonType: 'string',
        maxLength: 65535
      },

    additional_info: {
        bsonType: 'string',
        maxLength: 65535
      },

    posts: {
        bsonType: 'array',
        minItems: 1,
        maxItems: 100,
        items: {
          bsonType: 'string',
          maxLength: 65535
        }
      },

    time: {
        bsonType: 'int',
        minimum: 0
      },

    price: {
        bsonType: 'double',
        minimum: 0
      },

    bio_price: {
        bsonType: 'double',
        minimum: 0
      },

    charge: {
        bsonType: 'double',
        minimum: 0
      },

    total: {
        bsonType: 'double',
        minimum: 0
      },

    history: {
        bsonType: 'object',
        properties: {
          created_at: { bsonType: 'date' },
          accepted_at: { bsonType: 'date' },
          started_at: { bsonType: 'date' },
          completed_at: { bsonType: 'date' },
          paid_at: { bsonType: 'date' },
          rejected_at: { bsonType: 'date' },
          refunded_at: { bsonType: 'date' },
        }
      },

    created_at: { bsonType: 'date' },

    updated_at: { bsonType: 'date' }
  }
}

我收到这样的错误消息:

collection orders not exists
MongoError: BSON field 'create.bsonType' is an unknown field.
    at Connection.<anonymous> ({ProjectDir}\backend\node_modules\mongodb\lib\core\connection\pool.js:466:61)
    at Connection.emit (events.js:210:5)
    at processMessage ({ProjectDir}\backend\node_modules\mongodb\lib\core\connection\connection.js:384:10)
    at Socket.<anonymous> ({ProjectDir}\backend\node_modules\mongodb\lib\core\connection\connection.js:553:15)
    at Socket.emit (events.js:210:5)
    at addChunk (_stream_readable.js:309:12)
    at readableAddChunk (_stream_readable.js:290:11)
    at Socket.Readable.push (_stream_readable.js:224:10)
    at TCP.onStreamRead (internal/stream_base_commons.js:182:23) {
  ok: 0,
  errmsg: "BSON field 'create.bsonType' is an unknown field.",
  code: 40415,
  codeName: 'Location40415',
  name: 'MongoError',
  status: 500,
  [Symbol(mongoErrorContextSymbol)]: {}
}

我进行了搜索,但找到了与之相关的任何解决方案。这是什么原因?

我没有在 jsonSchema 下嵌套对象。 将验证文件更改为:

module.exports = {
  validator :{
    $jsonSchema : {
      bsonType: 'object',
      required: ['buyer_id', 'seller_id', 'insta_id', 'time', 'posts', 'price', 'total'],
      //... rest omitted
    }
  }
}

终于成功了。

更新

由于这个问题和答案获得了一些流量,我正在改进我的答案以帮助未来的读者。

什么时候出现这个错误

Mongo错误 BSON field 'create.bsonType' is an unknown field(代码编号 40415)在 Mongo shell 命令或 Node.js 脚本中存在语法错误时触发 创建一个带有验证器的集合

如果您没有正确嵌套验证器规范对象,您将收到此错误。

解决方法是什么

请检查您是否在 Mongo shell 命令或 Node.js 代码

中正确嵌套了验证器对象

正确的语法如下(对于 Node.js 驱动程序和 MongoDB shell):

db.createCollection('your_collection', {
  validator: {
    $jsonSchema: {
      bsonType: 'object',
      required: ['property_1', 'property_2'],
      properties: {
        property_1: {
          bsonType: 'string'
        },
        property_2: {
          bsonType: 'string'
        }
      }
    }
  }
});