更新MongoDB中的嵌套值(Mongoose)

x759pob2  于 2023-06-23  发布在  Go
关注(0)|答案(1)|浏览(96)

我尝试更新MongoDB文档中的嵌套值data1

{
  "content": {
    "data": {
      "data1": "Some data",
      "data2": "Better data"
    },
    "location": {
      "coordinates": [
        45,
        45
      ],
      "type": "Point"
    }
  },
  "_id": "647e40c590bc322763bdf182",
  "title": "test",
  "description": "Here is some updated description",
  "tags": [
    "test",
    "pic",
    "newTag"
  ],
  "dataType": "NOTREFERENCED",
  "createdAt": "2023-06-05T20:08:37.345Z",
  "updatedAt": "2023-06-07T18:37:23.134Z",
  "__v": 0
}

然而,我无法让它工作。我正在使用mongoose,并尝试了以下选项:

const id = "647e40c590bc322763bdf182"

await this.model.findByIdAndUpdate(id,{ $set: {content.data.data1: "Updated value"}},{new: true,});

await this.model.findByIdAndUpdate(id,{ content.data.data1: "Updated value"},{new: true,});
b4lqfgs4

b4lqfgs41#

你可以尝试这样的东西:

import mongoose from 'mongoose';
import YourModel from './models/yourModel';

const id = "647e40c590bc322763bdf182";

const updateItem = async () => {
  try {
    const item = await YourModel.findById(id);

    if (!item) {
      const newItem = new YourModel({
        // ...
      });
      await newItem.save();
      return;
    }

    item.content.data.data1 = "Updated value";
    await item.save();
  } catch (error) {
    console.error("An error occurred:", error);
  }
};

updateItem();

在这种方法中,我们首先搜索项目,然后单独修改其属性。
你也可以试试这个:

import mongoose from 'mongoose';
import YourModel from './models/yourModel';

const id = "647e40c590bc322763bdf182";

const updateItem = async () => {
  try {
    const updatedItem = await YourModel.findOneAndUpdate(
      { _id: id },
      { $set: { 'content.data.data1': 'Updated value' } },
      { new: true, upsert: true }
    );

    console.log("Item updated:", updatedItem);
  } catch (error) {
    console.error("An error occurred:", error);
  }
};

updateItem();

这使用了mongoose的findOneAndUpdate方法。
告诉我如果这对你有帮助。

相关问题