尝试从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"
}
}
真的不知道该怎么办.. 我以为问题应该出在我进入花园的方式上。
答案 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
})
您可以同时使用_id
和location_id
查找文档。
答案 2 :(得分:0)
db.getCollection('CollectionName').update_one(
{"gardens.name": '' },
{$set: {"gardens.name" : "New_Name"}})