问题
我有以下对象:
[
{
"_id":"1",
"store":"llama.com",
"items":[
{
"_id":"1_1",
"name":"item1"
},
{
"_id":"1_2",
"name":"item2"
}
]
},
{
"_id":"2",
"store":"frog.com",
"items":[
{
"_id":"2_1",
"name":"item1"
},
{
"_id":"2_2",
"name":"item2"
}
]
}
]
在这个对象中,我需要:
item
查找_id
尝试过的解决方案
我尝试使用aggregate
,但是我只能找到该对象,而不能修改它:
const ObjectId = mongoose.Types.ObjectId;
const item = await UserModel.aggregate([
{ $unwind: "$items" },
{
$match: { store, "items._id": ObjectId("1_1") },
},
]);
所需结果
如何通过store
查找项目,然后通过_id
查找项目子项,最后更改找到的item
的名称?
提前谢谢!
答案 0 :(得分:1)
在store
和items._id
中,输入要搜索的变量。
$set
在这里更改名称。
这适用于1级嵌套数组。对于更深层的嵌套数组,应使用arrayFilters
https://docs.mongodb.com/manual/release-notes/3.6/#arrayfilters
const item = await UserModel.findOneAndUpdate(
{
store: "some store",
"items._id": "your id"
},
{
$set: {
[`items.$.` + variable]: "change your name"
}
}
);
答案 1 :(得分:1)
看看是否可行
const item = await UserModel.findOneAndUpdate({ "store": "storeName",
"items._id" : "id" },{$set:{"items.0.name":"itemName"}}, {new: true})