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

Najít po osídlení mangusty

@Jason Cust už to vysvětlil docela dobře - v této situaci je často nejlepším řešením změnit schéma, aby se zabránilo dotazování Users podle vlastností dokumentů uložených v oddělené sbírce.

Zde je nejlepší řešení, které mě napadá a které vás k tomu nedonutí (protože jste v komentáři uvedl, že nemůžete).

Users.find().populate({
  path: 'email',
  match: {
    type: 'Gmail'
  }
}).exec(function(err, users) {
  users = users.filter(function(user) {
    return user.email; // return only users with email matching 'type: "Gmail"' query
  });
});

To, co zde děláme, je vyplnění pouze email s odpovídající další dotaz (match možnost v .populate() volání) - jinak email pole v Users dokumenty budou nastaveny na null .

Zbývá pouze .filter na vrácených users pole, jako ve vaší původní otázce - pouze s mnohem jednodušší, velmi obecnou kontrolou. Jak vidíte - buď email je nebo není.



  1. Dotaz na pole vnořených dokumentů na nejvyšší hodnotu pole

  2. Je možné vytvořit novou databázi v MongoDB pomocí Mongoose?

  3. Potřebujete udělat .toArray(), abyste získali výstup mongodb .find() na název klíče, nikoli na hodnotu

  4. jaká je výchozí velikost dávky v pymongo?