sql >> Database teknologi >  >> NoSQL >> MongoDB

mongodb kontrollerer regex på felter fra én samling til alle felter i anden samling

Det er ikke muligt at referere til det regex-felt, der er gemt i dokumentet, i regex-operatoren inde i match-udtryk.

Så det kan ikke gøres i mongo side med den nuværende struktur.

$lookup fungerer godt med ligestilling. Så et alternativ (ligner hvad Nic foreslog) ville være at opdatere din postsamling til at inkludere et ekstra felt kaldet keywords ( række nøgleordsværdier , det kan søges på ) for hver titel.

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

Ovenstående forespørgsel vil gøre noget som dette (virker fra 3.4).

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

Fra dokumenterne

Det ser ud til, at tidligere versioner (testet på 3.2) kun vil matche, hvis array har samme rækkefølge, værdier og længde af arrays er de samme.

Eksempelinput:

Brugere

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

Indlæg

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

Eksempeloutput:

[
  {
    "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. PHP:Er det dårligt design at serialisere objekter og sætte dem i databasen til senere?

  2. MongoDB $round vs $trunc:Hvad er forskellen?

  3. PyMongo-transaktionsfejl:Transaktionsnumre er kun tilladt på et replikasætmedlem eller mongoer

  4. Mongoose.js:Find bruger efter brugernavn LIKE værdi