sql >> Databasteknik >  >> NoSQL >> MongoDB

mongodb kontrollera regex på fält från en samling till alla fält i en annan samling

Det är inte möjligt att referera till det regex-fält som är lagrat i dokumentet i regex-operatorn inuti match expression.

Så det kan inte göras på mongosidan med nuvarande struktur.

$lookup fungerar bra med jämställdhetsvillkor. Så ett alternativ (liknande vad Nic föreslog) skulle vara att uppdatera din inläggssamling för att inkludera ett extra fält som heter keywords ( en rad nyckelordsvärden det kan sökas på ) för varje titel.

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

Ovanstående fråga kommer att göra ungefär så här (fungerar från 3.4).

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

Från dokumenten

Det verkar som att tidigare versioner (testade på 3.2) bara kommer att matcha om arrayen har samma ordning, värden och längden på arrayer är samma.

Exempelinmatning:

Användare

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

Inlägg

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

Exempelutgång:

[
  {
    "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. Hur använder man django tillsammans med mongoengine?

  2. Att förvandla ett manus för sådd av Mongoose till ett löfte

  3. lösa ett löfte med mongodb och nodejs

  4. Mongodb:Hitta dokument med array där minst ett element inte matchar ObjectID