作为序言,我已经和MongoDB一起工作了大约一个星期,所以这可能是一个非常简单的答案。
我的数据已经存储在我的集合中,我们会调用此集合content
,因为它包含文章,新闻等。其中每个articles
都包含另一个名为author
的数组拥有作者的所有信息(地址,电话,标题等)。
目标 - 我正在尝试创建一个查询,该查询将更新作者在特定作者所在的每篇文章上的地址,并且只更新指定的作者块(而不是阵列中存在的其他文章) )。
对特定文章的“全局更新”进行排序,该文章会影响他/她关于存在的每个内容的信息。
以下是content
与author
相似的示例。
{
"_id" : ObjectId("4c1a5a948ead0e4d09010000"),
"authors" : [
{
"user_id" : null,
"slug" : "joe-somebody",
"display_name" : "Joe Somebody",
"display_title" : "Contributing Writer",
"display_company_name" : null,
"email" : null,
"phone" : null,
"fax" : null,
"address" : null,
"address2" : null,
"city" : null,
"state" : null,
"zip" : null,
"country" : null,
"image" : null,
"url" : null,
"blurb" : null
},
{
"user_id" : null,
"slug" : "jane-somebody",
"display_name" : "Jane Somebody",
"display_title" : "Editor",
"display_company_name" : null,
"email" : null,
"phone" : null,
"fax" : null,
"address" : null,
"address2" : null,
"city" : null,
"state" : null,
"zip" : null,
"country" : null,
"image" : null,
"url" : null,
"blurb" : null
},
],
"tags" : [
"tag1",
"tag2",
"tag3"
],
"title" : "Title of the Article"
}
我可以通过运行以下命令找到该作者创建的每篇文章:
db.content.find({authors: {$elemMatch: {slug: 'joe-somebody'}}});
所以理论上我应该能够更新slu authors
的{{1}}记录而不是joe-somebody
(第二作者),我只是不确定你是如何进入和更新的该作者的每一条记录。
我以为自己走在正确的轨道上,这就是我尝试过的。
jane-somebody
我只是相信我在$ set语句中缺少一些东西来指定正确的作者并指向正确的数组。有什么想法吗?
b.content.update(
{authors:
{$elemMatch:
{slug: 'joe-somebody'}
}
},
{$set:
{address: '1234 Avenue Rd.'}
},
false,
true
);
我现在也试过这个:
**Update**
这最终对我有用!
b.content.update(
{authors:
{$elemMatch:
{slug: 'joe-somebody'}
}
},
{$set:
{'authors.$.address': '1234 Avenue Rd.'}
},
false,
true
);
它正确更新了所有记录,谢谢!