MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

mongodb проверява регулярен израз на полета от една колекция към всички полета в друга колекция

Не е възможно да се направи препратка към полето за регулярен израз, съхранено в документа в оператора за регулярен израз в израза за съвпадение.

Така че не може да се направи в mongo страна с текущата структура.

$lookup работи добре с условие за равенство. Така че една алтернатива (подобна на предложената от Ник) би била да актуализирате колекцията си от публикации, за да включите допълнително поле, наречено keywords (масив от стойности на ключови думи, по които може да се търси) за всяко заглавие.

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

Горната заявка ще направи нещо подобно (работи от 3.4).

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

От документите

Изглежда, че по-ранните версии (тествани на 3.2) ще съвпадат само ако масивът има същия ред, стойностите и дължината на масивите са еднакви.

Примерен вход:

Потребители

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

Публикации

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

Примерен резултат:

[
  {
    "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 Node проверява дали objectid е валиден

  2. MongoDB - Актуализиране на обект във вложен масив

  3. Персонализиран метод за заявка за актуализиране с пролетни данни MongoRepository

  4. Филтрирайте масива с помощта на оператора $in на етап $project

  5. Заявката е неуспешна с код за грешка 13 и съобщение за грешка „не е упълномощен на [db] да изпълни команда { find: