作为序言,我已经和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'}}});
所以理论上我应该能够更新authors
slug 的记录joe-somebody
但不是jane-somebody
(第二作者),我只是不确定你是如何进入并更新该作者的每条记录的.
我以为我走在了正确的轨道上,这就是我尝试过的.
b.content.update( {authors: {$elemMatch: {slug: 'joe-somebody'} } }, {$set: {address: '1234 Avenue Rd.'} }, false, true );
我只是相信我在$ set语句中缺少一些东西来指定正确的作者并指向正确的数组.有任何想法吗?
**Update**
我现在也试过这个:
b.content.update( {authors: {$elemMatch: {slug: 'joe-somebody'} } }, {$set: {'authors.$.address': '1234 Avenue Rd.'} }, false, true );
这最终对我有用!
db.content.update({'authors.slug':'joe-somebody'},{$set:{'authors.$.address':'Address That I wanted'}},false,true);
它会正确更新所有记录,谢谢!
也许你可以使用$运算符(位置运算符)?