sql >> Databáze >  >> NoSQL >> MongoDB

jak implementovat funkci jako levé spojení mysql v mongoose

To, o co se snažíte, není možné, protože na mongodb neexistuje žádný příkaz join.

Můžete toho dosáhnout dvěma způsoby:

1 – Podle DBRefs: Změnu schématu na takové, které obsahuje všechny informace o uživateli a nerozděluje je do dvou různých schémat, jak to děláte, viz denormalizované . Pak můžete použít Populace funkce pro získání všech údajů o osobách.

2 – Podle manuálu: Druhým řešením je provést druhé volání do databáze a získat data personProfile pomocí id uživatele jako filtru.

Příklad 1:

Tímto způsobem můžete získat data všech osob bez druhého volání do databáze.

var personSchema = Schema({
  _id     : Number,
  name    : String,
  birthday: Date,
  profilelink: String,
  email: String
});

var storySchema = Schema({
  _creator : { type : Schema.Types.ObjectId, ref: 'Person' },
  title    : String
});

Story
.find()
.populate(['_creator'])
.exec(function(err, stories) {
    //do your stuff here
}

Všimněte si, že používám typ Schema.Types.ObjectId a nikoli Číslo . Tímto způsobem můžete přiřadit novou hodnotu _creator předáním buď _id nebo objekt osoby a mongoose převede objekt na jeho _id. Můžete například zveřejnit něco jako

{
    _creator : {
        _id     : 123123123123,
        name    : 'Foo',
        birthday: '0000-00-00',
        profilelink: 'http://foo.bar',
        email: '[email protected]'
    },
    title    : 'Mr'
}

... a mangusta se převede na

{
    _creator : 123123123123,
    title    : 'Mr'
}

Příklad 2:

Tímto způsobem se vaše data stále normalizují a můžete získat všechna data o osobách druhým hovorem.

Story
.find()
.exec(function(err, stories) {
    var arrayLength = stories.length;

    for (var i = 0; i < arrayLength; i++) {
        var story = stories[i];
        personProfile.findById(story._creator, function (err, person) {
            story._creator = person;
        }
    };
    // do your stuff here
}



  1. Udržujte data Redis naživu mezi docker-compose dolů a nahoru v kontejneru Docker

  2. Maskování PII v MongoDB a dalších NoSQL DB přes…

  3. Chyba:querySrv ENODATA _mongodb._tcp.blog-cluster-0hb5z.mongodb.net na QueryReqWrap.onresolve [as oncomplete]

  4. Docker-compose a mongoDB:Nepodařilo se spustit WiredTiger v jakékoli verzi kompatibility?