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

时间:2017-10-16 13:53:59

标签: node.js mongodb express

我想console.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()mongodb命令的末尾更改name,它记录用户通过req.body.name

提交的新名称

1 个答案:

答案 0 :(得分:2)

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

但是,原始文档默认会传递给findOneAndUpdate回调,因此您可以取消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);
      }
    }
  );
});