gpt4 book ai didi

arrays - Meteor mongo更新嵌套数组

转载 作者:可可西里 更新时间:2023-11-01 09:08:51 24 4
gpt4 key购买 nike

示例文档:

{
"_id" : "5fTTdZhhLkFXpKvPY",
"name" : "example",
"usersActivities" : [
{
"userId" : "kHaM8hL3E3As7zkc5",
"startDate" : ISODate("2015-06-01T00:00:00.000Z"),
"endDate" : ISODate("2015-06-01T00:00:00.000Z")
}
]
}

我是 mongoDB 的新手,我阅读了有关更新嵌套数组的其他问题,但我无法正确完成。我想要做的是更改具有给定 userId 的用户的 startDate 和 endDate。我的问题是它总是将新对象推送到数组而不是使用给定的 userId 更改对象。

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

我很乐意提供帮助。

最佳答案

所以这里首先要说的是$elemMatch在您的情况下不需要,因为您只想匹配单个数组属性。当您需要来自同一数组元素的“两个或更多”属性来匹配您的条件时,您可以使用该运算符。否则你只需使用 "dot notation"作为标准。

第二种情况是 $push ,其中该特定运算符意味着将元素“添加”到数组中。在您的情况下,您只想“更新”,因此此处正确的运算符是 $set :

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

所以 positional $ operator这是匹配数组元素中“找到的索引”并允许 $set 运算符“更改”在该“位置”匹配的元素的内容。

关于arrays - Meteor mongo更新嵌套数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30866537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com