【问题标题】:Performing multiple commits in one MongoDb connection在一个 MongoDb 连接中执行多个提交
【发布时间】:2019-08-16 19:50:45
【问题描述】:

我正在尝试编写一个将在 Node.js 上本地运行的 JavaScript 应用程序。然后我想要用户输入命令,这些命令将从 MongoDb 连接中插入、更新或删除数据。

换句话说,我希望 MongoDb 连接在 node.js 运行时保持打开状态,以便用户的命令执行它打算执行的操作。

我尝试使用多个连接,但这似乎不适用于承诺堆栈。用户将插入一个对象,但如果他们随后尝试删除该对象,则不会发生任何事情。

const MongoClient = require('mongodb').MongoClient;
const uri = require('./mongoConnection.json'); // this is my connection information
const mongoClient = new MongoClient(uri.connectionString, { useNewUrlParser: true });
mongoClient.connect(function(err, db){
    var dbo = db.db("TestBotDb").collection("Test");
    dbo.insertOne({ "data1" : "new data", "data2" : "new data2" });    

    var result = dbo.findOne({ "data2" : "new data2" });
    dbo.deleteOne({ "_id" : result._id});

});

由于插入似乎不会立即发生,我不知道以后如何将其分解为函数。我不想在应用程序运行时等待插入以尝试删除对象。我不一定知道用户何时插入,何时尝试删除。

【问题讨论】:

    标签: javascript mongodb promise


    【解决方案1】:

    您可以使用 async / await 来执行此操作。

    const MongoClient = require('mongodb').MongoClient;
    const uri = require('./mongoConnection.json'); // this is my connection information
    const mongoClient = new MongoClient(uri.connectionString, { useNewUrlParser: true });
    mongoClient.connect(async (err, db) =>{
        var dbo = db.db("TestBotDb").collection("Test");
        await dbo.insertOne({ "data1" : "new data", "data2" : "new data2" }); // Waits until your data insert or error
    
        var result = await dbo.findOne({ "data2" : "new data2" }); // Waits until read data or error
        await dbo.deleteOne({ "_id" : result._id}); // // Waits until delete data or error
    
    });
    

    【讨论】:

    • 在承诺完成之前“等待”是否不会继续执行脚本?
    猜你喜欢
    • 2021-12-25
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    • 2011-02-17
    相关资源
    最近更新 更多