mongo db 从另一个 collection 添加子文档
mongo db add subdocuments from another collection
我有两个 collections 团队赢得的奖项和一份团队列表。我想通过一些小的转换将整个奖项作为子文档 ETL 到其他(团队),但我只从奖项中获得一个子文档到团队。
这是我使用的代码。 Teams 在数字上有一个唯一的索引,看起来像最终文档减去了 accolade 子文档。但是,数组中只添加了一个 accolade 子文档。我错过了什么?
db.awardout.find().forEach(function(award_team){
if(award_team != null)
{
db.teams.findAndModify(
{
query: {number: award_team.team},
update: { $set: {accolades: [ {sku: award_team.sku, acc_category: "Award", acc_name: award_team.name }] } },
upsert: true,
});
}
});
示例奖项(团队可以赢得多个奖项,荣誉是 collection 个奖项,稍后汇总):
/* 18 */
{
"_id" : ObjectId("552077289ad9c19e809965de"),
"sku" : "RE-VRC-14-0110",
"name" : "Tournament Finalists (VRC/VEXU)",
"team" : "44",
"qualifies" : [],
"order" : "1"
}
/* 35 */
{
"_id" : ObjectId("552077289ad9c19e809965ef"),
"sku" : "RE-VRC-14-0110",
"name" : "Robot Skills Winner (VRC/VEXU)",
"team" : "44",
"qualifies" : [],
"order" : "4"
}
以下是仅添加一项荣誉的团队变成的样子:
{
"_id" : ObjectId("552071f69ad9c19e80996432"),
"program" : "VRC",
"robot_name" : "Fred VII",
"organisation" : "Green Egg Robotics",
"region" : "Massachusetts",
"country" : "United States",
"number" : "44",
"team_name" : "Green Egg Robotics",
"city" : "Oakham",
"grade" : "High School",
"is_registered" : "0",
"accolades" : [{
"sku" : "RE-VRC-14-0110",
"acc_category" : "Award",
"acc_name" : "Think Award (VRC/VEXU)"
}]
}
我本以为会在阵列中添加两个荣誉。我是否需要将奖项object id 携带到团队子文档中?
如果您只执行 $set
,它只会用您放置的数组替换当前存在的数组。所以你必须做一个 $push
:
{ $push: {accolades: {sku: award_team.sku, acc_category: "Award", acc_name: award_team.name } } }
这将向数组中插入一个新文档。
完整文档:http://docs.mongodb.org/manual/reference/operator/update/push/
我有两个 collections 团队赢得的奖项和一份团队列表。我想通过一些小的转换将整个奖项作为子文档 ETL 到其他(团队),但我只从奖项中获得一个子文档到团队。
这是我使用的代码。 Teams 在数字上有一个唯一的索引,看起来像最终文档减去了 accolade 子文档。但是,数组中只添加了一个 accolade 子文档。我错过了什么?
db.awardout.find().forEach(function(award_team){
if(award_team != null)
{
db.teams.findAndModify(
{
query: {number: award_team.team},
update: { $set: {accolades: [ {sku: award_team.sku, acc_category: "Award", acc_name: award_team.name }] } },
upsert: true,
});
}
});
示例奖项(团队可以赢得多个奖项,荣誉是 collection 个奖项,稍后汇总):
/* 18 */
{
"_id" : ObjectId("552077289ad9c19e809965de"),
"sku" : "RE-VRC-14-0110",
"name" : "Tournament Finalists (VRC/VEXU)",
"team" : "44",
"qualifies" : [],
"order" : "1"
}
/* 35 */
{
"_id" : ObjectId("552077289ad9c19e809965ef"),
"sku" : "RE-VRC-14-0110",
"name" : "Robot Skills Winner (VRC/VEXU)",
"team" : "44",
"qualifies" : [],
"order" : "4"
}
以下是仅添加一项荣誉的团队变成的样子:
{
"_id" : ObjectId("552071f69ad9c19e80996432"),
"program" : "VRC",
"robot_name" : "Fred VII",
"organisation" : "Green Egg Robotics",
"region" : "Massachusetts",
"country" : "United States",
"number" : "44",
"team_name" : "Green Egg Robotics",
"city" : "Oakham",
"grade" : "High School",
"is_registered" : "0",
"accolades" : [{
"sku" : "RE-VRC-14-0110",
"acc_category" : "Award",
"acc_name" : "Think Award (VRC/VEXU)"
}]
}
我本以为会在阵列中添加两个荣誉。我是否需要将奖项object id 携带到团队子文档中?
如果您只执行 $set
,它只会用您放置的数组替换当前存在的数组。所以你必须做一个 $push
:
{ $push: {accolades: {sku: award_team.sku, acc_category: "Award", acc_name: award_team.name } } }
这将向数组中插入一个新文档。
完整文档:http://docs.mongodb.org/manual/reference/operator/update/push/