让我们想象一下mongo的集合 - 让我们说杂志。出于某种原因,我们最终将每期杂志作为单独的文件存储起来。每篇文章都是Articles
- 数组中的子文档,每篇文章的作者都表示为Writers
- 子文档中Article
- 数组内的子文档。只有作者的姓名和电子邮件存储在文章中,但杂志级别上有一个Writers
- 数组,其中包含有关每个作者的更多信息。
{
"Title": "The Magazine",
"Articles": [
{
"Title": "Mongo Queries 101",
"Summary": ".....",
"Writers": [
{
"Name": "tom",
"Email": "tom@example.com"
},
{
"Name": "anna",
"Email": "anna@example.com"
}
]
},
{
"Title": "Why not SQL instead?",
"Summary": ".....",
"Writers": [
{
"Name": "mike",
"Email": "mike@example.com"
},
{
"Name": "anna",
"Email": "anna@example.com"
}
]
}
],
"Writers": [
{
"Name": "tom",
"Email": "tom@example.com",
"Web": "tom.example.com"
},
{
"Name": "mike",
"Email": "mike@example.com",
"Web": "mike.example.com"
},
{
"Name": "anna",
"Email": "anna@example.com",
"Web": "anna.example.com"
}
]
}
如何将一位作者从杂志中完全删除?
查找不受欢迎的作者所在的杂志非常容易。问题是将作者从所有子文档中拉出来。
MongoDB 3.6引入了一些新的占位符运算符$[]
和$[<identity>]
,我怀疑这些运算符可以与$pull
或$pullAll
一起使用,但到目前为止,我还没有没有任何成功。
是否有可能一次性完成这项工作?或者至少不超过两个?从所有文章中删除作者的一个问题,以及从杂志中删除传记的一个查询?
答案 0 :(得分:1)
您可以尝试以下查询。
db.col.update(
{},
{"$pull":{
"Articles.$[].Writers":{"Name": "tom","Email": "tom@example.com"},
"Writers":{"Name": "tom","Email": "tom@example.com"}
}},
{"multi":true}
);