更新 MongoDB 集合中陣列中的特定元素。
MongoDB 資料 -
{
_id: new ObjectId("63608e3c3b74ed27b5bdf703"),
placename: "khulna",
frnds: [
{ name: "osama", cost: "2121" },
{ name: "lotid", cost: "2121" },
{ name: "haris", cost: "2121" },
{ name: "atiq", cost: "2121" } ],
},
{
_id: new ObjectId("63608e3c3b74ed27b5bdf703"),
plmarshal: "narishal",
frnds: [
{ name: "ojda", cost: "2121" },
{ name: "majid", cost: "2121" },
{ name: "nafis", cost: "2121" },
{ name: "rofiq", cost: "2121" } ],
},
{
_id: new ObjectId("63608e3c3b74ed27b5bdf703"),
placename: "latin america",
frnds: [
{ name: "mamun", cost: "2121" },
{ name: "lotifa", cost: "2121" },
{ name: "sajid", cost: "2121" },
{ name: "natiq", cost: "2121" } ],
}
我想frnds用按名稱匹配的特定元素更新陣列。我嘗試這種方式,但它不起作用。
const query = { name: "khulna", "frnds.name": "osama"};
const updateDocument = { $set: {frnds: { name: "rasana", cost: "212871" } } };
const result = await db.collection(<collection_name>).updateOne(query, updateDocument);
更新后,檔案如 -
{
_id: new ObjectId("63608e3c3b74ed27b5bdf703"),
placename: "khulna",
frnds: [
{ name: "rasana", cost: "212871" }, //// previus { name: "osama", cost: "2121" }
{ name: "lotid", cost: "2121" },
{ name: "haris", cost: "2121" },
{ name: "atiq", cost: "2121" } ],
}
uj5u.com熱心網友回復:
應該
placename但不是name。否則它不會過濾任何要更新的檔案。當前
$set將覆寫frnds陣列物件。您需要將$[<identifier>]位置過濾運算子與arrayFilters.
db.collection.update({
"placename": "khulna",
"frnds.name": "osama"
},
{
$set: {
"frnds.$[f]": {
name: "rasana",
cost: "212871"
}
}
},
{
arrayFilters: [
{
"f.name": "osama"
}
]
})
演示 @ Mongo 游樂場
const query = {
"placename": "khulna",
"frnds.name": "osama"
};
const updateDocument = {
$set: {
"frnds.$[f]": {
name: "rasana",
cost: "212871"
}
}
};
const result = await db.collection(<collection_name>).updateOne(query, updateDocument, {
arrayFilters: [
{
"f.name": "osama"
}
]
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/534794.html
