MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

mongodb sprawdza wyrażenie regularne na polach z jednej kolekcji do wszystkich pól w innej kolekcji

Nie można odwoływać się do pola wyrażenia regularnego przechowywanego w dokumencie w operatorze wyrażenia regularnego w wyrażeniu dopasowania.

Więc nie można tego zrobić po stronie mongo przy obecnej strukturze.

$lookup działa dobrze z warunkiem równości. Więc jedną alternatywą (podobną do tego, co sugerował Nic) byłaby aktualizacja kolekcji postów, tak aby zawierała dodatkowe pole o nazwie keywords ( tablica wartości słów kluczowych, w których można je przeszukiwać ) dla każdego tytułu.

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

Powyższe zapytanie zrobi coś takiego (działa od 3.4).

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

Z dokumentów

Wygląda na to, że wcześniejsze wersje (testowane na 3.2) będą pasować tylko wtedy, gdy tablica ma tę samą kolejność, wartości i długość tablic jest taka sama.

Przykładowe wejście:

Użytkownicy

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

Posty

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

Przykładowe wyjście:

[
  {
    "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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDb:znajdź głęboko zagnieżdżony obiekt za pomocą $lookup

  2. Konfigurowanie alertów dotyczących metryk MongoDB

  3. Szukaj w wielu kolekcjach w MongoDB

  4. Mongo:suma $geoNear i $text brak wyników

  5. Przesyłanie strumieniowe wyniku operacji agregowanej za pomocą spring-data-mongodb