如何更新文档中的 Meteor 数组元素
How to update Meteor array element inside a document
我有一个 Meteor Mongo 文档,如下所示
{
"_id" : "zFndWBZTvZPgSKXHP",
"activityId" : "aRDABihAYFoAW7jbC",
"activityTitle" : "Test Mongo Document",
"users" : [
{
"id" : "b1@gmail.com",
"type" : "free"
},
{
"id" : "JqKvymryNaCjjKrAR",
"type" : "free"
},
],
}
我想使用如下所示的 Meteor 查询使用自定义生成的 ID 更新特定数组元素的电子邮件。
比如我要更新文档
如果 'users.id' == "b1@gmail.com"
然后将其更新为 users.id = 'SomeIDXXX'
所以更新后的文档应该如下所示。
{
"_id" : "zFndWBZTvZPgSKXHP",
"activityId" : "aRDABihAYFoAW7jbC",
"activityTitle" : "Test Mongo Document",
"users" : [
{
"id" : "SomeIDXXX",
"type" : "free"
},
{
"id" : "JqKvymryNaCjjKrAR",
"type" : "free"
},
],
}
我已经尝试了下面的但没有成功。
Divisions.update(
{ activityId: activityId, "users.id": emailId },
{ $set: { "users": { id: _id } } }
);
有人可以帮我解决相关的 Meteor 查询吗?谢谢 !
您需要使用 $push operator 而不是 $set。
{ $push: { <field1>: <value1>, ... } }
你的查询实际上几乎是正确的,除了一小部分我们想要通过其索引来识别要更新的元素。
Divisions.update({
"activityId": "aRDABihAYFoAW7jbC",
"users.id": "b1@gmail.com"
}, {
$set: {"users.$.id": "b2@gmail.com"}
})
您可能需要 arrayFilters 选项。
Divisions.update(
{ activityId: activityId },
{ $set: { "users.$[elem].id": "SomeIDXXX" } },
{ arrayFilters: [ { "elem.id": "b1@gmail.com" } ], multi: true }
);
https://docs.mongodb.com/manual/reference/operator/update/positional-filtered/
我有一个 Meteor Mongo 文档,如下所示
{
"_id" : "zFndWBZTvZPgSKXHP",
"activityId" : "aRDABihAYFoAW7jbC",
"activityTitle" : "Test Mongo Document",
"users" : [
{
"id" : "b1@gmail.com",
"type" : "free"
},
{
"id" : "JqKvymryNaCjjKrAR",
"type" : "free"
},
],
}
我想使用如下所示的 Meteor 查询使用自定义生成的 ID 更新特定数组元素的电子邮件。
比如我要更新文档
如果 'users.id' == "b1@gmail.com"
然后将其更新为 users.id = 'SomeIDXXX'
所以更新后的文档应该如下所示。
{
"_id" : "zFndWBZTvZPgSKXHP",
"activityId" : "aRDABihAYFoAW7jbC",
"activityTitle" : "Test Mongo Document",
"users" : [
{
"id" : "SomeIDXXX",
"type" : "free"
},
{
"id" : "JqKvymryNaCjjKrAR",
"type" : "free"
},
],
}
我已经尝试了下面的但没有成功。
Divisions.update(
{ activityId: activityId, "users.id": emailId },
{ $set: { "users": { id: _id } } }
);
有人可以帮我解决相关的 Meteor 查询吗?谢谢 !
您需要使用 $push operator 而不是 $set。
{ $push: { <field1>: <value1>, ... } }
你的查询实际上几乎是正确的,除了一小部分我们想要通过其索引来识别要更新的元素。
Divisions.update({
"activityId": "aRDABihAYFoAW7jbC",
"users.id": "b1@gmail.com"
}, {
$set: {"users.$.id": "b2@gmail.com"}
})
您可能需要 arrayFilters 选项。
Divisions.update(
{ activityId: activityId },
{ $set: { "users.$[elem].id": "SomeIDXXX" } },
{ arrayFilters: [ { "elem.id": "b1@gmail.com" } ], multi: true }
);
https://docs.mongodb.com/manual/reference/operator/update/positional-filtered/