为什么 MongoDB 会抛出错误 "ns does not exist"?

Why does MongoDB throw error "ns does not exist"?

我不明白为什么 MongoDB 使用以下 NodeJS 代码会触发错误:

import {
  Collection,
  Document,
  Filter,
  IndexDirection,
  MongoClient,
  ObjectId
} from "mongodb";

export const client = new MongoClient(process.env.DB_URL);
await client.connect();
export const database = client.db(process.env.DB_NAME);
await database.command({ ping: 1 });

const users = database.collection("User");
console.log({ count: await users.countDocuments() }); // prints 0

await database.command({
  collMod: "User",
  validator: {
    $jsonSchema: {
      bsonType: "object",
      required: ["_id", "email"],
      additionalProperties: false,
      properties: {
        _id: { bsonType: "objectId" },
        email: { bsonType: "string" }
      }
    }
  },
  validationLevel: "strict"
}); // triggers error

最后一条指令触发了以下错误:

MongoServerError: ns does not exist

我明白这是因为集合不存在,但调用 command 时它不应该存在吗?谢谢!

我会投票认为 await users.countDocuments() returns 0 作为解决方法,实际上这里发生的是:

  1. ns not found exception 被抛出。
  2. 这个异常是通过返回 0 来处理的,没有实际的异常。

您也可以在 shell 中看到它:

MongoDB Enterprise replset:PRIMARY> use notexisteddb
switched to db notexisteddb
MongoDB Enterprise replset:PRIMARY> db.coll.count()
0
MongoDB Enterprise replset:PRIMARY> show collections
MongoDB Enterprise replset:PRIMARY>