Node.js MongoDB客户端是否会自动创建新数据库及集合?
问题:Node.js中MongoDB操作是否会自动创建数据库和集合?
根据MongoDB官方文档,在mongosh中执行以下命令:
use myDB db.myNewCollection1.insertOne( { x: 1 } )
会自动创建myDb数据库和myNewCollection1集合。那运行下面这段Node.js代码时,是否也会像mongosh那样自动创建对应的数据库和集合?
const {MongoClient, ServerApiVersion} = require('mongodb'); // Connectionstring const uri = 'mongodb://root:example@127.0.0.1:27017/'; // Create a MongoClient with a MongoClientOptions object to set the Stable API version const client = new MongoClient(uri, { serverApi: { version: ServerApiVersion.v1, strict: true, deprecationErrors: true, } }); client.connect({poolSize:10}); const database = client.db('myDb'); const collection = database.collection('myNewCollection1') collection.updateOne({"var":value})
回答
不会自动创建对应的数据库和集合,原因如下:
- MongoDB服务器层面创建数据库和集合的触发条件是执行了实际写入数据的操作(比如
insertOne、insertMany,或者带upsert: true的更新操作)。你这段代码中的updateOne既没有匹配到任何文档,也没有设置upsert: true,不会产生任何写入行为,因此不会触发自动创建。 - 仅仅通过
client.db('myDb')和database.collection('myNewCollection1')只是在客户端代码中引用了这些资源,并不会在MongoDB服务器上实际创建它们。 - 如果希望自动创建数据库和集合,可以修改
updateOne操作,添加upsert: true选项,当没有匹配到目标文档时会自动插入新文档,进而触发数据库和集合的创建:
// 示例:添加upsert选项的正确写法 collection.updateOne( {"var": value}, {$set: {"var": value}}, {upsert: true} )
内容的提问来源于stack exchange,提问作者Dimitrios Desyllas
相关产品推荐
相关产品推荐

