首页 > 解决方案 > 如何使用 _id 从 mLab 集合中更新对象

问题描述

我目前在我的后端有一个可以更新我的数组的 api。问题是,它甚至不引用 _id 并且只更新我数组中的第一项。每当我编辑其他对象的值然后单击更新时,它只会更新我集合中的第一个对象。

这是代码:

router.route('carousel/update/:id').put(function(req, res) {
var data = req.body;
const myquery = {"_id": ObjectId };

db.collection("home").updateOne(myquery, {
    $set: {
        "img": data.img,
        "header": data.header,
        "subheader": data.subheader
    }
}, (err, results) => {
   res.status(200).json({status: "ok"})}
})

这段代码允许我更新我的集合中的第一个对象。我如何配置它以允许使用 _id 更新特定对象?我错过了什么?

编辑

在查看其他堆栈溢出帖子后,这就是我所做的:

const myquery = {"_id" : ObjectId(req.params.id) };

但现在我收到一条错误消息,提示“传入的参数必须是 12 个字节的单个字符串或 24 个十六进制字符的字符串。此外,当我控制台日志时,URL 的 ':id' 部分未定义。

标签: node.jsangularmongodb

解决方案


你正在使用updateOne它的应该updateMany如下

db.collection("home").updateMany(myquery, {

updateOne将更新第一个文档。

编辑

也看看这条线

const myquery = {"_id": ObjectId }; is incomplete

应该

const myquery = {"_id": ObjectId("some id") };

推荐阅读