作为前言,我已经使用MongoDB大约一周了,所以这可能是一个非常简单的答案。
我已经将数据存储在我的集合中,我们将这个集合称为content
,因为它包含文章、新闻等。每个articles
都包含另一个名为author
的数组,该数组包含所有作者的信息(地址、电话、头衔等)。
Goal -我正在尝试创建一个查询,它将更新特定作者所在的每一篇文章的作者地址,并且只更新指定的作者块(而不是数组中存在的其他作者块)。
一篇特定文章的“全局更新”,它会影响他/她对存在的每一条内容的信息。
下面是一个带有author
的content
的示例。
{
"_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'}}});
所以从理论上讲,我应该能够更新slug joe-somebody
的authors
记录,但不能更新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);
它会正确地更新所有记录,谢谢!
发布于 2010-06-18 02:48:49
也许你可以使用$运算符(positional-operator)?
https://stackoverflow.com/questions/3064450
复制相似问题