【发布时间】:2018-03-23 05:30:24
【问题描述】:
让我们想象一个 mongo 集合 - 比如说杂志。出于某种原因,我们最终将每期杂志存储为单独的文档。每篇文章都是Articles-array 内的一个子文档,每篇文章的作者都表示为Article-subdocument 上Writers-array 内的一个子文档。文章中只存储了作者的姓名和电子邮件,但在杂志级别有一个Writers-array 包含有关每个作者的更多信息。
{
"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 一起使用,但到目前为止,我还没有取得任何成功。
可以一次性完成吗?或者至少不超过两个?从所有文章中删除作者的查询,以及从杂志中删除传记的查询?
【问题讨论】:
-
你能给我一个样本数据集吗?
-
我已经稍微扩展了示例文档。应该够了。尝试从文档中删除
{ "Name": "tom", "Email": "tom@example.com" }。 -
您需要同时匹配
Name和Email。一个人,一个都不够。
标签: mongodb mongodb-query