Arrays Meteor mongo更新嵌套数组

Arrays Meteor mongo更新嵌套数组,arrays,mongodb,meteor,nested,database,Arrays,Mongodb,Meteor,Nested,Database,示例文件: { "_id" : "5fTTdZhhLkFXpKvPY", "name" : "example", "usersActivities" : [ { "userId" : "kHaM8hL3E3As7zkc5", "startDate" : ISODate("2015-06-01T00:00:00.000Z"), "endDate" : ISODate("2015-06-01T00:00:00.000Z") } ] }

示例文件:

{
"_id" : "5fTTdZhhLkFXpKvPY",
"name" : "example",
"usersActivities" : [ 
    {
        "userId" : "kHaM8hL3E3As7zkc5",
        "startDate" : ISODate("2015-06-01T00:00:00.000Z"),
        "endDate" : ISODate("2015-06-01T00:00:00.000Z")
    }
]
}
我是mongoDB的新手,我阅读了关于更新嵌套数组的其他问题,但我不能正确地完成它。我想做的是更改具有给定用户ID的用户的startDate和endDate。我的问题是,它总是将新对象推送到数组中,而不是使用给定的用户ID更改对象

Activity.update( 
    _id: activityId, usersActivities: {
         $elemMatch: {
             userId: Meteor.userId()
         }
     }},
    {
        $push: {
            'usersActivities.$.startDate': start,
            'usersActivities.$.endDate': end
         }
    }
);

我将非常乐意提供帮助。

因此,这里要说的第一件事是,在您的情况下不需要,因为您只希望匹配单个数组属性。当需要来自同一数组元素的“两个或多个”属性来匹配条件时,可以使用该运算符。否则,您只能将其用作标准

这里的第二种情况是with,其中该特定运算符表示将元素“添加”到数组中。在您的情况下,您只需要“更新”,因此正确的运算符为:

Activity.update(
{“_id”:activityId,“usersActivities.userId”:Meteor.userId()},
{
“$set”:{
“usersActivities.$.startDate”:开始,
“usersActivities.$.endDate”:结束
}
}
)
因此,下面是与数组元素的“找到的索引”匹配的内容,并允许
$set
操作符“更改”在该“位置”匹配的元素不存在,如何使用
userID
startDate
endDate
插入整个对象?–JustideHard Jun 14:20“

如果你想把新的,你应该看看流星帐户包,有如下方法

Accounts.createUser(YOU_USER_SCHEME)
如果Meteor.userId()不存在,如何插入带有“userId”、“startDate”和“endDate”的整个对象?