gpt4 book ai didi

MongoDB $set 聚合

转载 作者:行者123 更新时间:2023-12-05 05:11:47 27 4
gpt4 key购买 nike

<分区>

我想根据另一个“源”集合的文档中的字段值,在“目标”集合的每个文档中设置一个新字段的值。

目标集合的文档如下所示:

数据库名称:

{ 
"name" : "Larry",
"info" : {
"phone" : "5551212"
}
}
{
"name" : "Curly",
"info" : {
"phone" : "5551213"
}
}
{
"name" : "Moe",
"info" : {
"phone" : "5551234"
}
}

第二个集合的文档如下所示(我希望将此时区添加到目标集合中):

db.电话:

{ 
"phone" : "5551212",
"timezone" : "UTC-6"
}

{
"phone" : "5551213",
"timezone" : "UTC-7"
}

{
"phone" : "5551234",
"timezone" : "UTC-6"
}

我希望第一个“目的地”集合的文档最终看起来像这样:

数据库名称:

{ 
"name" : "Larry",
"info" : {
"phone" : "5551212",
"timezone" : "UTC-6"
}
}
{
"name" : "Curly",
"info" : {
"phone" : "5551213",
"timezone" : "UTC-7"
}
}
{
"name" : "Moe",
"info" : {
"phone" : "5551234",
"timezone" : "UTC-6"
}
}

换句话说,我有一个包含时区的非常大的集合(电话)和一个不包含时区的非常大的集合(名称),我希望第一个集合包含这些时区,使用两者中的电话号码作为键。

我已经在 mongoShell 中试过了,但没有成功:

list = db.names.aggregate([
{ $match: { } },

{ $lookup: {
from: "phones",
localField: "info.phone",
foreignField: "phone",
as: "zoneinfo"
}
}
]);

list.result.forEach(function(x) {
db.names.update({_id:x._id}, {$set:{'info.timezone':'zoneinfo.timezone'}});
});

因此,链接时区集合并将其添加到 list,结果,作为每个文档的新字段(这很有效)。然后,由于我们无法在 aggregate 中进行更新,因此遍历生成的文档,从“临时”字段中添加一个新的永久字段 info.timezone , zoneinfo.timezone, 在之前的操作中添加。

我在这里做错了什么?还有其他更可取的方法吗?每个集合中有数千个文档,因此手工操作是不可取的。

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