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

mongodb kontroluje regulární výraz na polích z jedné kolekce do všech polí v jiné kolekci

Není možné odkazovat na pole regulárního výrazu uložené v dokumentu v operátoru regulárního výrazu ve výrazu shody.

Takže to nelze udělat na mongo straně se současnou strukturou.

$lookup funguje dobře s podmínkou rovnosti. Takže jednou alternativou (podobnou tomu, co navrhl Nic ) by byla aktualizace vaší sbírky příspěvků tak, aby zahrnovala další pole nazvané keywords ( pole hodnot klíčových slov, podle kterých lze vyhledávat ) pro každý titul.

db.users.aggregate([
   {$lookup: {
          from: "posts",
          localField: "userregex",
          foreignField: "keywords",
          as: "posts"
        }
    }
])

Výše uvedený dotaz udělá něco takového (funguje od 3.4).

keywords: { $in: [ userregex.elem1, userregex.elem2, ... ] }.

Z dokumentů

Vypadá to, že starší verze (testované na 3.2) se budou shodovat pouze v případě, že pole má stejné pořadí, hodnoty a délku polí.

Ukázkový vstup:

Uživatelé

db.users.insertMany([
  {
    "name": "James",
    "userregex": [
      "another",
      "here"
    ]
  },
  {
    "name": "John",
    "userregex": [
      "another",
      "string"
    ]
  }
])

Příspěvky

db.posts.insertMany([
  {
    "title": "a string here",
    "keyword": [
      "here"
    ]
  },
  {
    "title": "another string here",
    "keywords": [
      "another",
      "here"
    ]
  },
  {
    "title": "one string here",
    "keywords": [
      "string"
    ]
  }
])

Ukázkový výstup:

[
  {
    "name": "James",
    "userregex": [
      "another",
      "here"
    ],
    "posts": [
      {
        "title": "another string here",
        "keywords": [
          "another",
          "here"
        ]
      },
      {
        "title": "a string here",
        "keywords": [
          "here"
        ]
      }
    ]
  },
  {
    "name": "John",
    "userregex": [
      "another",
      "string"
    ],
    "posts": [
      {
        "title": "another string here",
        "keywords": [
          "another",
          "here"
        ]
      },
      {
        "title": "one string here",
        "keywords": [
          "string"
        ]
      }
    ]
  }
]


  1. Dotaz mongo pro zjištění změn hodnot v časových řadách

  2. MongoDB $ cmp

  3. mongodb vybrat z různých databází

  4. nodes passport Chyba:Neznámá strategie autentizace local-login