Mos*_*sar 4 database arrays nested mongodb meteor
示例文档:
{
"_id" : "5fTTdZhhLkFXpKvPY",
"name" : "example",
"usersActivities" : [
{
"userId" : "kHaM8hL3E3As7zkc5",
"startDate" : ISODate("2015-06-01T00:00:00.000Z"),
"endDate" : ISODate("2015-06-01T00:00:00.000Z")
}
]
}
Run Code Online (Sandbox Code Playgroud)
我是mongoDB的新手,我读了有关更新嵌套数组的其他问题,我无法正确完成.我想要做的是为给定userId的用户更改startDate和endDate.我的问题是它始终将新对象推送到数组而不是使用给定的userId更改对象.
Activity.update(
_id: activityId, usersActivities: {
$elemMatch: {
userId: Meteor.userId()
}
}},
{
$push: {
'usersActivities.$.startDate': start,
'usersActivities.$.endDate': end
}
}
);
Run Code Online (Sandbox Code Playgroud)
我很乐意帮忙.
小智 9
因此,首先要说的$elemMatch是在您的情况下不需要,因为您只想匹配单个数组属性.当您需要来自同一数组元素的"两个或更多"属性以匹配您的条件时,可以使用该运算符.否则你只需使用"点符号"作为标准.
这里的第二种情况是$push,其中该特定运算符意味着向元素"添加"元素.在您的情况下,您只想"更新",因此这里的正确运算符是$set:
Activity.update(
{ "_id": activityId, "usersActivities.userId": Meteor.userId() },
{
"$set": {
'usersActivities.$.startDate': start,
'usersActivities.$.endDate': end
}
}
)
Run Code Online (Sandbox Code Playgroud)
因此,这里的位置$运算符与数组元素中的"找到的索引"匹配,并允许$set运算符"更改"在该"位置"匹配的元素.