Удалить совпадающие два регулярных выражения в одном поле - PullRequest
0 голосов
/ 31 мая 2018

Мне нужно удалить документы, но с несколькими условиями в одной переменной.

db.getCollection('system_parameter').remove(
{
    "variable":/^pickup_kota/,
    "variable":
    {
        $nin:
        [
            /^pickup_kota_jakarta/
        ]
    }
}

)

Я пытаюсь удалить все данные с помощьютот же префикс ('pickup_kota'), но исключая документы ('pickup_kota_jakarta').

Если я выполню запрос выше, ВСЕ данные будут удалены, включая, скажем, префикс some_doc, но исключая pickup_kota_jakarta

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Вы можете попробовать оператор $ all.

db.getCollection('system_parameter').remove({
  "variable": {$all: [
               {$regex: /^pickup_kota/},
               {$nin:[/^pickup_kota_jakarta/]} 
              ]}
})
0 голосов
/ 31 мая 2018

Все аргументы запроса MongoDB уже являются условиями AND, поэтому просто включите их в один и тот же ключ:

db.getCollection('system_parameter').remove({
  "variable": { 
    "$regex": /^pickup_kota/,
    "$nin": [
      /^pickup_kota_jakarta/
    ]
  }
})

Или вы всегда можете написать «длинную форму» с помощью $and

db.getCollection('system_parameter').remove({
  "$and": [
    { "variable": /^pickup_kota/ },
    { "variable": "$nin": [/^pickup_kota_jakarta/] }
  ]
})

Итак, с двумя такими документами:

{ "variable" : "pickup_kota_somewhere" }
{ "variable" : "pickup_kota_jakarta" }

Удаляется только первый

Но до тех пор, пока вы можете использовать другой оператор, такой как $regex здесь, чтобы разделить условия на ключи, тогда вам не нужна полная форма.

Кроме того, поскольку оба они привязаны к началу строки, это более эффективно для MongoDBсделать два сравнения, чем пытаться использовать регулярное выражение для удовлетворения обоих возможных условий.Единственное регулярное выражение, которое могло бы нарушить это ограничивающее правило и снизить эффективность, полученную при поиске, привязанном к началу строки, которая может использовать индекс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...