舉些例子,
{
"_id":ObjectId("6245131fdbcda3639d75c951"),
"username": "joy"
"data" : [
{
"_id" : ObjectId("6245131fdbcda3639d75c953"),
"value_1" : "hello1"
"value_2" : "thank you1"
},
{
"_id" : ObjectId("6245131fdbcda3639d75c954"),
"value_1" : "hello2"
"value_2" : "thank you2"
},
]
}
我想編輯一個資料物件并洗掉舊的并推送已編輯的
因為我想編輯的物件將是陣列的最后一個索引。
我想得到這個結果。
{
"_id":ObjectId("6245131fdbcda3639d75c951"),
"username": "joy"
"data" : [
{
"_id" : ObjectId("6245131fdbcda3639d75c954"),
"value_1" : "hello2"
"value_2" : "thank you2"
},
{
"_id" : ObjectId("6245131fdbcda3639d75c953"),
"value_1" : "change data from hello1"
"value_2" : "change data from thank you1"
},
]
}
我試過了,但我得到了錯誤。
db.getCollection('profile').update(
{username:"joy"},
{
{
"$pull": {"data":
{"_id": ObjectId("6245131fdbcda3639d75c953")}
},
},
{
"$push": {"data":
{
"_id" : ObjectId("6245131fdbcda3639d75c953"),
"value_1" : "change data from hello1"
"value_2" : "change data from thank you1"
}
},
}
})
我怎樣才能獲得價值?謝謝。:)
uj5u.com熱心網友回復:
MongoDB 不允許在單個欄位中使用多個操作/運算子,您可以從 4.2 開始將更新與聚合管道一起使用,
$filter迭代陣列回圈data并過濾不等于您輸入的檔案_id,$concatArrays將過濾后的data陣列和要添加到data陣列最后一個索引中的新物件連接起來
db.getCollection('profile').update(
{ username: "joy" },
[{
$set: {
data: {
$concatArrays: [
{
$filter: {
input: "$data",
cond: {
$ne: ["$$this._id", "6245131fdbcda3639d75c953"]
}
}
},
[
{
_id: "6245131fdbcda3639d75c953",
value_1: "change data from hello1",
value_2: "change data from thank you1"
}
]
]
}
}
}]
)
操場
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/453621.html
