【问题标题】:how to update an object from mLab collection using _id如何使用 _id 从 mLab 集合中更新对象
【发布时间】:2020-02-07 18:23:35
【问题描述】:

我目前在我的后端有一个可以更新我的数组的 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.js angular mongodb


    【解决方案1】:

    您使用的是updateOne,它应该是updateMany,如下所示

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

    updateOne 将更新第一个文档。

    编辑

    也看这一行

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

    应该是

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

    【讨论】:

    • 让我先试试这个。
    • updateMany 现在为数组中的所有对象而不是特定对象更新相同的值,这不是我想要的。现在所有对象在更新后都具有相同的值。
    • @Isaac Agatep 其实你的要求是什么?您想通过单击按钮更新该特定文档吗??
    • 是的,这就是我想做的。在我的 UI 上,集合中的每个对象都在输入字段中显示为值。每个对象还有一个更新按钮,我可以在其中使用相同的输入字段更改该特定对象的值。
    • @Isaac Agatep 那么你的问题出在查询部分。查看我编辑的答案
    猜你喜欢
    • 2017-09-10
    • 2020-05-10
    • 2012-09-06
    • 2019-07-10
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多