在Mongodb中更新数组内的键值

时间:2019-12-09 16:44:10

标签: mongodb fetch

尝试从mongoDB更新花园中的“名称”键时遇到问题。

{
    name: "Adky",
    email: "dry@fsdf.co.uk",
    lastConected: "",
    gardens: [{
      name: '',
      location_id: "43567",
      plants: []
    }, {
      name: '',
      location_id: "234092",
      plants: []
    }, {
      name:'',
      location_id: "22355",
      plants: []
    }]
  }

我尝试过

collection
      .findOneAndUpdate({
        _id: ObjectId(id)
      },{
        "gardens.location_id": req.params.location_id
      }, {
        $set: {
          "gardens.$.name": updatedData.name
        }
      }, {
        returnOriginal: false
      }

但是出现此错误

{
  "status": 500,
  "error": {
    "driver": true,
    "name": "MongoError"
  }
}

真的不知道该怎么办.. 我以为问题应该出在我进入花园的方式上。

3 个答案:

答案 0 :(得分:0)

请使用该代码

  db.testers.findOneAndUpdate({
    _id: ObjectId("5dee7d425a13b401c7722c28")
  ,
    "gardens.location_id": "234092"
  }, {
    $set: {
      "gardens.$.name": 'tst34'
    }
  })

答案 1 :(得分:0)

FindOneAndUpdate需要3个参数

   db.collection.findOneAndUpdate(
   <filter>,
   <update document or aggregation pipeline>, // Changed in MongoDB 4.2
   {
     projection: <document>,
     sort: <document>,
     maxTimeMS: <number>,
     upsert: <boolean>,
     returnNewDocument: <boolean>,
     collation: <document>,
     arrayFilters: [ <filterdocument1>, ... ]
   }
)

但是您正在通过4 parameters,可以更新代码

collection
    .findOneAndUpdate({
        _id: ObjectId(id), "gardens.location_id": req.params.location_id
    }, {
        $set: {
            "gardens.$.name": updatedData.name
        }
    }, {
        returnOriginal: false
    })

您可以同时使用_idlocation_id查找文档。

答案 2 :(得分:0)

db.getCollection('CollectionName').update_one(
{"gardens.name": '' },
{$set: {"gardens.name" : "New_Name"}})