Haal de sleutel uit de kaart en haal gegevens ermee op in één query

Ik heb twee collecties in mongo. Ten eerste, zijn de feitelijke gegevens:

{ "_id" : "internal_key1", "data" : "some data1" }
{ "_id" : "internal_key2", "data" : "some data2" }
{ "_id" : "internal_key3", "data" : "some data3" }

Een andere is een kaart met sleutels die door een externe service aan mijn interne sleutels wordt geleverd:

{ "_id" : "ext_key111", "internal" : "internal_key1" }
{ "_id" : "ext_key222", "internal" : "internal_key2" }
{ "_id" : "ext_key333", "internal" : "internal_key3" }

Als ik alleen een externe sleutel heb, kan ik dan op een of andere manier gegevens ophalen (bijvoorbeeld "ext_key111" ophalen "some data1") met slechts één query? Eval-achtige spullen natuurlijk niet meetellen.

0
toegevoegd de auteur McGarnagle, de bron

1 antwoord

Het korte antwoord is NEE.

U vraagt ​​in feite om een ​​join en MongoDB staat expliciet geen joins toe.

However, depending on your requirements, you may be able to get away with the following structure:

{ "_id" : "internal_key1", "ext_id": "ext_key111", "data" : "some data1" }

U kunt een extra index maken op ext_id . Je kunt het zelfs uniek maken, wat lijkt op je gegevens.

db.ensureIndex({ ext_id: 1 }, { unique: true, background: true })
1
toegevoegd
Nu hoef ik niet mijn eigen antwoord te schrijven, omdat dit precies de oplossing is waar ik naar toe ben gegaan.
toegevoegd de auteur Oleg V. Volkov, de bron