如何将行拆分为不同的集合,每个集合存储第一个集合的_id作为参考

时间:2011-10-12 20:36:08

标签: python mongodb pymongo

给定以下具有四个属性的行:

{ att1 : "att1", att2 : "att2", att3 : "att3", att4 : "att4"}

我想将此行存储到MongoDB中的两个集合中。的_id collectionA将用作关系数据库中的外键。

如何使用pymongo在MongoDB中有效地实现它?

collectionA
{
    "att1"  : "att1"
    "att2"  : "att2"
    "_id"   : ObjectID("4e95e41a1d41c823d5000001")
}
collectionB
{
    "att3"   : "att3"
    "att4"   : "att4"
    "ref_id" : ObjectID("4e95e41a1d41c823d5000001")
    "_id"    : ObjectId("4e95f81587ebf9f190c3cc4e")
}

我在这里发布了一个用于JavaScript的solution。但是,每一次, 我们必须首先将文档插入到collectionA,然后查询_id 刚插入的文档用于进一步操作。还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

驱动程序实际上负责生成ObjectId值,所以它相当简单(下面我假设你的数据库存储在python变量'db'中):

import bson

myrow = { att1 : "att1", att2 : "att2", att3 : "att3", att4 : "att4"}

ref_id = bson.ObjectId()
db.collectionA.insert({att1:myrow['att1'], att2:myrow['att2'], _id:ref_id})
db.collectionB.insert({att3:myrow['att3'], att4:myrow['att4'], ref_id:ref_id})