sql >> Base de Datos >  >> NoSQL >> MongoDB

mongodb verifique la expresión regular en los campos de una colección a todos los campos en otra colección

No es posible hacer referencia al campo de expresión regular almacenado en el documento en el operador de expresión regular dentro de la expresión de coincidencia.

Por lo tanto, no se puede hacer en el lado de mongo con la estructura actual.

$lookup funciona bien con condiciones de igualdad. Entonces, una alternativa (similar a lo que sugirió Nic) sería actualizar su colección de publicaciones para incluir un campo adicional llamado keywords (matriz de valores de palabras clave en las que se puede buscar) para cada título.

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

La consulta anterior hará algo como esto (funciona desde 3.4).

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

De los documentos

Parece que las versiones anteriores (probadas en 3.2) solo coincidirán si la matriz tiene el mismo orden, los valores y la longitud de las matrices es la misma.

Entrada de muestra:

Usuarios

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

Publicaciones

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

Salida de muestra:

[
  {
    "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"
        ]
      }
    ]
  }
]