2015-04-07 114 views
0

我有两个集合已经获得了奖项和团队名单。我想通过一些小的转变将整个奖项ETL作为子文档(其他(团队)),但我只从奖项中获得一份子文档。mongo db从另一个集合中添加子文档

这是我使用的代码。团队拥有唯一的编号索引,并且看起来像最终文档减去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, 
    }); 
    } 
    }); 

样品奖(队能赢得多个奖项和荣誉是要奖励集合以后汇总计算):

/* 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)" 
    }] 
} 

我会期待两个荣誉被添加到数组中。我是否需要将奖励对象ID携带到团队子文档中?

回答

0

如果你只是做$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/

+0

谢谢。一旦我恢复了团队,它就像冠军一样工作。得到正确的赞誉正确的地方! –

相关问题