sql >> Database >  >> NoSQL >> MongoDB

mongodb check regex op velden van de ene collectie naar alle velden in een andere collectie

Het is niet mogelijk om te verwijzen naar het regex-veld dat is opgeslagen in het document in de regex-operator binnen de match-expressie.

Dus het kan niet worden gedaan in mongo-kant met de huidige structuur.

$lookup werkt goed met gelijkheidsvoorwaarde. Dus een alternatief (vergelijkbaar met wat Nic suggereerde) zou zijn om je postverzameling bij te werken met een extra veld genaamd keywords ( array van trefwoordwaarden waarop kan worden gezocht ) voor elke titel.

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

De bovenstaande query doet iets als dit (werkt vanaf 3.4).

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

Uit de documenten

Het lijkt erop dat eerdere versies (getest op 3.2) alleen overeenkomen als de array dezelfde volgorde heeft, de waarden en de lengte van de arrays hetzelfde zijn.

Voorbeeldinvoer:

Gebruikers

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

Berichten

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

Voorbeelduitvoer:

[
  {
    "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. $lookup geeft lege array terug

  2. Meldings- en nieuwsgedeelte met behulp van Redis

  3. Mongoose - Efficiënte update van een geïndexeerde array van mongoose.Schema.Types.Mixed

  4. MongoDB C# Aggregatie - afwikkelen -> groupBy