如何从 MongoDB collection 中删除 sub-document 中不匹配的值?
How to remove not matching values from sub-document from MongoDB collection?
我的 mongoDB collection.
中有以下文档
{"key":"CarName","value":{"default":"Unknown","MyCar":"TNK1234","YourCar":"TNW2342"}}
在这个文档中,我只想保留 "MyCar" 项在 value sub-document 中。
我试过了
db.mycollection.update({{"key":"CarName"},{value.MyCar:0}},{$pull:{value.MyCar:0}});
但是整个文档正在被删除。不确定语法。
我希望文档看起来像
{'key': 'CarName', 'value': {'TNK1234': 'My Car'}}
对评论的一些建议
我试过了
db.mycollection.update({"key":"CarName"},{$unset:{"value.default:"","value.YourCar":""}});
有效
但如果我有多个字段要取消设置,我将不得不提及所有我想删除的字段,所以我正在寻找替代方案。
如果您使用的是 MongoDB 4.2,您可以指定一个管道来处理更新。实现这一目标的一种方法是:
- 将对象转换为键值对数组
- 过滤数组,只保留你想要的键
- 将数组转换回对象
- 将值存储回原始字段
db.mycollection.update({"key":"CarName"},
[{$set: {
value: {
$arrayToObject: {
$filter: {
input: {$objectToArray: "$value"},
cond: {$eq: ["$$this.k","MyCar"]}
}
}
}
}}]
)
Mongo playground 不支持更新,但这演示了管道阶段将执行的操作:Playground
我的 mongoDB collection.
中有以下文档{"key":"CarName","value":{"default":"Unknown","MyCar":"TNK1234","YourCar":"TNW2342"}}
在这个文档中,我只想保留 "MyCar" 项在 value sub-document 中。
我试过了
db.mycollection.update({{"key":"CarName"},{value.MyCar:0}},{$pull:{value.MyCar:0}});
但是整个文档正在被删除。不确定语法。
我希望文档看起来像
{'key': 'CarName', 'value': {'TNK1234': 'My Car'}}
对评论的一些建议
我试过了
db.mycollection.update({"key":"CarName"},{$unset:{"value.default:"","value.YourCar":""}});
有效
但如果我有多个字段要取消设置,我将不得不提及所有我想删除的字段,所以我正在寻找替代方案。
如果您使用的是 MongoDB 4.2,您可以指定一个管道来处理更新。实现这一目标的一种方法是:
- 将对象转换为键值对数组
- 过滤数组,只保留你想要的键
- 将数组转换回对象
- 将值存储回原始字段
db.mycollection.update({"key":"CarName"},
[{$set: {
value: {
$arrayToObject: {
$filter: {
input: {$objectToArray: "$value"},
cond: {$eq: ["$$this.k","MyCar"]}
}
}
}
}}]
)
Mongo playground 不支持更新,但这演示了管道阶段将执行的操作:Playground