Как добавить валидатор в существующую коллекцию с помощью драйвера mongodb node.js? - PullRequest
0 голосов
/ 16 сентября 2018

Вот код, в котором я пытаюсь добавить валидатор в существующую коллекцию.

const { MongoClient } = require("mongodb")

const schema = {
  $jsonSchema: {
    bsonType: "object",
    additionalProperties: false,
    required: ["name"],
    properties: {
      _id: {
        bsonType: "objectId"
      },
      name: {
        bsonType: "string"
      }
    }
  }
}

const main = async () => {
  const client = await MongoClient.connect(
    "mongodb://localhost",
    { useNewUrlParser: true }
  )
  const db = client.db("t12")

  // await db.createCollection("test", { validator: schema })
  await db.createCollection("test")
  await db.admin().command({ collMod: "test", validator: schema })

  await db.collection("test").createIndex({ name: 1 }, { unique: true })

  await db.collection("test").insertOne({ name: "t1" })
  await db.collection("test").insertOne({ value: "t2" }) // should fail

  const all = await db
    .collection("test")
    .find({})
    .toArray()
  console.log(all)

  await client.close()
}

main().catch(err => console.error(err))

Не удалось:

max7z@mbp t12__npm__mongodb (master)*$ node test/1.js
{ MongoError: ns does not exist
    at /Users/max7z/projects/t/t12__npm__mongodb/node_modules/mongodb-core/lib/connection/pool.js:581:63
    at authenticateStragglers (/Users/max7z/projects/t/t12__npm__mongodb/node_modules/mongodb-core/lib/connection/pool.js:504:16)
    at Connection.messageHandler (/Users/max7z/projects/t/t12__npm__mongodb/node_modules/mongodb-
  ok: 0,
  errmsg: 'ns does not exist',
  code: 26,
  codeName: 'NamespaceNotFound',
  name: 'MongoError',
  [Symbol(mongoErrorContextSymbol)]: {} }
^C

Если я создаю коллекцию с этой схемой, она работает, но когда я пытаюсь добавить ватидатор с помощью collMod, он не работает.

Как добавить валидатор в существующую коллекцию с помощью команды collMod?

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Проблема была в этой строке:

await db.admin().command({ collMod: "test", validator: schema })

Правильный способ сделать это:

await db.command({ collMod: "test", validator: schema })

0 голосов
/ 16 сентября 2018

Я думаю, что вы должны использовать Mongoose для проверки схемы.Пожалуйста, прочитайте о лунном.Это лучшее из доступных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...