我有以下代码:
connection((db) => {
db.collection('orders')
.updateOne(
{ "_id": req.body._id}, // Filter
{"name": req.body.name} // Update
)
.then((obj) => {
console.log('Updated - ' + obj);
res.redirect('orders')
})
.catch((err) => {
console.log('Error: ' + err);
})
})我想按顺序更改名字,但没有更新。控制台中的结果是
Updated - {"n":0,"nModified":0,"ok":1}
我试着读了那些文件,但这很可怕
编辑:{$set: {"name": req.body.name}},也不起作用
编辑2:传递的ID与数据库中的_id匹配。在数据库中被称为“ObjectId(‘5a42ja.’)”时,我查询的是纯文本ID,这是否是一个问题?
发布于 2017-12-05 15:00:53
也许您应该在更新查询中使用"$set“,如下所示:
{$set: {"name": req.body.name}}, // Update文档中的更多信息
编辑
如果它不能工作,这可能是因为你的过滤器没有匹配。
也许您应该尝试与这样的ObjectId匹配:
var ObjectID = require('mongodb').ObjectID;
// In your request
{ "_id": ObjectID(req.body._id)}, // Filter希望能帮上忙。
发布于 2017-12-05 15:14:11
使用{$set: {"name": req.body.name}} (正如Sparw提到的那样)更新文档中您想要的属性。另外,如果您作为参数传递的id在集合中不存在(您希望使用相同的id创建一个id),则可以将其作为第三个参数{upsert: true}传递以创建一个参数。
在你的例子中:
connection((db) => {
db.collection('orders')
.updateOne(
{ "_id": req.body._id}, // Filter
{$set: {"name": req.body.name}}, // Update
{upsert: true} // add document with req.body._id if not exists
)
.then((obj) => {
console.log('Updated - ' + obj);
res.redirect('orders')
})
.catch((err) => {
console.log('Error: ' + err);
}) })发布于 2019-12-22 21:55:39
正确的语法是:
monDb.collection.updateOne(
{"_id": ObjectId(req.params.id)},
{ $set: updateDoc },
function(err, doc) {
...
}
);更新:不是ObjectID,而是ObjectId。
https://stackoverflow.com/questions/47656515
复制相似问题