Potřebuji přesunout data mezi sbírek, jako byly dříve navrženy s použitím relační model v mysli, a máme nějaké vyhledávání výkonem. Všimněte si, že údaje uvedené je pouze příklad a já potřebuju, aby to pro velký soubor dat. Datová struktura je následující:
// Collection person
{
_id: <object_id>
...other data
}
// Collection employments
{
_id: <object_id>
person_id: <person_id>,
... other data,
}
Teď musím přesunout všechny data z employments
kolekce person
kolekce založené na person_id
a employment_id
. A nebudu mazání employments
kolekce, jak jsem také muset přesunout některé z metadat person
kolekce employment
sbírka vzhledem k některým usecases.
Edit:
A person
může mít více employments
. Takže budu muset vyměnit všechny ids
uvnitř person
aktuální employments
data. Také zaměstnanost má person_id
který musí být nahrazen(můžete vytvořit novou vlastnost říci person
namísto nahrazení person_id
), některé metadat person
(např. jméno, e-mail..).
$sloučit vypadá slibně. Bude třeba to vyzkoušet. Se mi zdá matoucí.
Příklad výsledku, který si přeje:
Dokumenty ve dvou sbírkách vypadat jako níže:
Osoba Kolekce
{
"_id": "619cf3045ce7329d6a8c059c",
"name": "John Doe",
"email": "[email protected]",
"contact": 1234567890
}
Pracovní Kolekce
// Two documents related to person above
// Document one
{
"_id": "619cf89913380c621ea8d4ec",
"person_id": "619cf3045ce7329d6a8c059c",
"employment_type": "Owner",
"yearly_income": 10000000
}
// Document two
{
"_id": "619cf912374db5aec2ceb6de",
"person_id": "619cf3045ce7329d6a8c059c",
"employment_type": "Salary",
"yearly_income": 12340000
}
Očekávaný výsledek pro osobu sbírka bude aktualizován
{
"_id": "619cf3045ce7329d6a8c059c",
"name": "John Doe",
"email": "[email protected]",
"contact": 1234567890,
"employments": [
{
"_id": "619cf89913380c621ea8d4ec",
"person_id": "619cf3045ce7329d6a8c059c",
"employment_type": "Owner",
"yearly_income": 10000000
},
{
"_id": "619cf912374db5aec2ceb6de",
"person_id": "619cf3045ce7329d6a8c059c",
"employment_type": "Salary",
"yearly_income": 12340000
}
]
}
Očekávaný výsledek pro zaměstnanost sbírka bude aktualizován
Poznámka: employment_type
a yearly_income
nejsou potřeba, když kolekce je aktualizováno(lze odstranit)
// Document one
{
"_id": "619cf89913380c621ea8d4ec",
"person_id": "619cf3045ce7329d6a8c059c",
"person": {
"_id": "619cf3045ce7329d6a8c059c",
"name": "John Doe",
"email": "[email protected]",
"contact": 1234567890
}
}
// Document two
{
"_id": "619cf912374db5aec2ceb6de",
"person_id": "619cf3045ce7329d6a8c059c",
"person": {
"_id": "619cf3045ce7329d6a8c059c",
"name": "John Doe",
"email": "[email protected]",
"contact": 1234567890
}
}
Jakékoliv řešení, poněkud blízko to je velmi přijatelné.