Как разбить строку на разные коллекции, используя каждый _id первой коллекции в качестве ссылки - PullRequest
0 голосов
/ 13 октября 2011

Имеется следующая строка с четырьмя атрибутами:

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

Я хочу сохранить эту строку в двух коллекциях в MongoDB. _Id of коллекция A будет использоваться в качестве внешнего ключа в реляционной БД.

Как эффективно реализовать это в MongoDB с помощью pymongo?

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

Я видел решение , опубликованное здесь для JavaScript. Однако каждый раз мы должны сначала вставить документ в collectionA, а затем запросить _id только что вставленный документ для дальнейших операций. Есть ли лучший способ?

1 Ответ

1 голос
/ 13 октября 2011

Драйвер фактически отвечает за генерацию значения 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})
...