mongodb - 如何使用 $ pull 从嵌套数组 pymongo 的内部数组中删除元素
问题描述
这是我的新闻文档结构
{
"_id" : ObjectId("5bff0903bd9a221229c7c9b2"),
"title" : "Test Page",
"desc" : "efdfr",
"mediaset_list" : [
{
"_id" : ObjectId("5bfeff94bd9a221229c7c9ae"),
"medias" : [
{
"_id" : ObjectId("5bfeff83bd9a221229c7c9ac"),
"file_type" : "png",
"file" : "https://aws.com/gg.jpg",
"file_name" : "edf.jpg"
},
{
"_id" : ObjectId("5bfeff83bd9a221229c7c9ad"),
"file_type" : "mov",
"file" : "https://aws.com/gg.mov",
"file_name" : "abcd.mov"
}
]
}
]}
我尝试过的查询如下
方法一
db.news.find_and_modify({},{'$pull': {"mediaset_list": {"medias": {"$elemMatch" : {"_id": ObjectId('5bfeff83bd9a221229c7c9ac')}} }}})
方法二
db.news.update({},{'$pull': {"mediaset_list.$.medias": {"_id": ObjectId('5bfeff83bd9a221229c7c9ac')}} })
我们面临的问题
上述查询正在删除 'mediaset_list' 中的整个元素。但我只想删除“媒体”匹配对象 ID 中的元素。
解决方案
来自@micki 的 mongo shell 查询(上面的答案),这是 pymongo 语法,它将使用该媒体 id 更新所有新闻文档。
db.news.update_many({},
{
"$pull":
{ "mediaset_list.$[item].medias": { "_id": ObjectId("5bfeff83bd9a221229c7c9ad") } } ,
},
array_filters=[{ "item._id": ObjectId("5bfeff94bd9a221229c7c9ae")}],
upsert=True)
推荐阅读
- flutter - 如何使用 Appium Flutter Driver 将数据输入到 DropDown
- json - 如何使用 Codable 对象映射来自 Alamofire 的数据的特定字段?
- android - 需要在 Flutter 中制作一个弹出对话框
- reactjs - 在 redux 包装的 Nextjs 中的服务器端渲染页面期间访问 MongoDB
- php - 我在 laravel 中生成的 xml 文件中有一个额外的白色空行
- python - 使用 Python 列出 str 到 int
- database - 带有加密通信的 Jboss7 的 Oracle 数据库 URL 无效
- swagger - 无法在 swagger 文档中添加不记名令牌
- angular - Angular - 主页组件
- java - 从 MongoDB 中删除“_class” - Springboot