我有以下代码:
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匹配。我在数据库中查询纯文本ID是一个问题,它被称为“ObjectId('5a42ja ...')”
答案 0 :(得分:14)
也许你应该使用" $ set"在您的更新查询中,如下所示:
{$set: {"name": req.body.name}}, // Update
中的更多信息
修改强>
如果它不起作用,可能是因为与您的过滤器不匹配。
也许你应该尝试匹配像这样的ObjectId:
var ObjectID = require('mongodb').ObjectID;
// In your request
{ "_id": ObjectID(req.body._id)}, // Filter
希望它有所帮助。
答案 1 :(得分:1)
使用{$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);
}) })
答案 2 :(得分:0)
强硬@Spraw的回答在某些情况下是正确的,但有时不起作用。我认为方便的答案是($_.psendtime, get-date)[0]
。
updateOne({_id: new ObjectID(req.body._id)}, {$set: {"name": req.body.name}}, callback)
中的_id
是mongodb
对象,应实例化。
答案 3 :(得分:0)
为时已晚,但对于新手或使用mongodb学习Node.js的学生而言。而不是updateOne
方法,只需使用update
方法。
connection((db) => {
db.collection('orders')
.update(
{ "_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);
}) })
答案 4 :(得分:0)
对我来说,我必须先删除“ _id” / id字段,然后再在更新中传递对象。
否则会说该字段无效。
显然,在您将其用作参考时更新密钥并不是最好的选择。
答案 5 :(得分:0)
正确的语法是:
monDb.collection.updateOne(
{"_id": ObjectID(req.params.id)},
{ $set: updateDoc },
function(err, doc) {
...
}
);
答案 6 :(得分:0)
我也遇到了麻烦,我用req.body中的_id创建了一个常量
const {_id} = req.body //pass ID user
await User.updateOne({_id},{$set:data}, (err)=>{
if(err) return res.status(200).json({
error: true,
code: 115,
message: "Erro to update user!"
})
})
答案 7 :(得分:0)
如果收集模式缺少要更新的字段,则可能会发生这种情况。如果架构不严格(即isStrict:false),请检查更新运算符。在某些情况下,新的更新值可以与现有值相同。在这种情况下,猫鼬回来了
List<Tuple<NamePropeties, NameEntries>> joined = joinOn(
properties,
names,
t -> Objects.equals(t.a.id, t.b.id) && Objects.equals(t.a.months, t.b.months)
);
答案 8 :(得分:0)
En NEXT.js
我的项目基于 React 和 Next.js。我有这个问题。 我愚蠢的解决方案是重新启动(下一个开发者)xD
我在我的 Schema 模型中添加了两个字段,并尝试更新这些新字段,但直到我重新启动 mi 项目后才起作用。
我希望为某人节省时间。 :)