当前位置: 首页 > 知识库问答 >
问题:

如何将mongodb数据库查询记录到控制台(而不是MongoShell)?

殷德本
2023-03-14

我想安慰一下。log()记录mongodb数据库查询的结果,无需进入mongo shell。下面是我的代码。相关部分以粗体显示。

router.put('/quotes/:id', (req, res, next) => {
  let personToUpdate = req.params.id;
  **console.log("old name: " + JSON.stringify(db.collection("quotes").findOne({ _id: ObjectId(personToUpdate) })) );**
  db.collection("quotes").findOneAndUpdate( 
    { _id: ObjectId(personToUpdate)},
    {$set: {
      name: req.body.name
      }
    }, function (err, object) {
      if (err) {
        console.warn(err.message);
      } else {
        **console.log("new name: " + req.body.name);**
      }
    }
  );
});

我尝试过:

console.dir(),但返回 [object, object]。我尝试过 print() 和 printjson(),但这些都是 mongo shell 独有的命令。

最终结果应该是,当用户通过put请求更改名称时,首先它将存储在数据库中的旧名称记录到控制台,然后在findOneAndUpdate()mongob命令更改名称的末尾,它记录用户通过req.body.name提交的新名称

共有1个答案

向泽语
2023-03-14

findOne 是异步的,因此您需要提供回调来获取结果,然后将其余代码放在该回调中,以便在获得原始文档之前不会发生更新。

但是,默认情况下,原始文档被传递给< code>findOneAndUpdate回调,因此您可以消除< code>findOne调用,并从那里获取原始名称。

router.put('/quotes/:id', (req, res, next) => {
  let personToUpdate = req.params.id;
  db.collection("quotes").findOneAndUpdate( 
    { _id: ObjectId(personToUpdate)},
    {$set: {
      name: req.body.name
      }
    }, function (err, result) {
      if (err) {
        console.warn(err.message);
      } else {
        console.log("old name: " + result.value.name);
        console.log("new name: " + req.body.name);
      }
    }
  );
});
 类似资料:
  • 我知道,当连接到SQL server时,可以通过在属性文件行中添加以下内容(如本文所述)来查看发送到DB的实际查询: 在使用CouchBase的时候应该有什么方法呢?

  • 问题内容: 我正在尝试编写一个简单的数据库应用程序,该应用程序可以访问多个数据服务器,一些MySQL,MSSQL和SqlLite3。我正在使用“数据库/ SQL”包来访问它们。 我需要将SQL查询记录到各个服务器上,以进行调试和审核。我该如何实现? 问题答案: 假设您不想使用服务器日志记录功能,显而易见的解决方案是在进行所有查询时简单地记录它们。 这是您问题的基本解决方案。您可以通过多种方式对其进

  • 我试图将命令提示符中打印出来的信息从JAVA控制台显示到C#。当在JAVA中发出System.out.println时,它可以很好地工作,但是它不能用于logger.info print out。 注意:当我通过windows命令提示符(CMD>java-jar testbed.jar)运行它时,记录器信息会在命令提示符中打印出来。 JAVA来做一个简单的增量和减量数字,当按下按钮进行增量或减量时

  • 我正在使用下面的jQuery JSONP请求按URL检查资源的状态。当资源不可用或服务器关闭时,我的函数更新显示。 我遇到的问题是,尽管为和声明了处理程序(它们不将任何内容记录到控制台),但jQuery总是将失败的请求记录在控制台中。如果资源长时间不可用,这将建立一个巨大的控制台日志,最终导致浏览器进程崩溃(在我的例子中是Chrome)。 有什么办法可以阻止它这样做吗?

  • 我正在迁移一个遗留的应用程序来使用logback,在这个过程中我试图保持所有的旧功能以相同的方式工作。遗留应用程序所做的一件事是,如果无法写入日志文件(由于空间不足、权限不正确等原因),则将日志记录到控制台 对于logback,似乎应该由StatusListener来处理这个问题,我可以使用getOrigin获得筛选后的附加程序,但我不知道如何获得与origin附加程序相关联的日志记录程序。有可能