我想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
提交的新名称答案 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);
}
}
);
});