Вопрос по mongodb – удалить документы с размером поля массива менее 3 в mongoDB

5

у меня есть коллекция mongoDB с именемcol есть документы, которые выглядят так

<code>{
  {
    intField:123,
    strField:'hi',
    arrField:[1,2,3]
  },

  {
    intField:12,
    strField:'hello',
    arrField:[1,2,3,4]
  },

  {
    intField:125,
    strField:'hell',
    arrField:[1]
  }
}
</code>

Теперь я хочу удалить документы из коллекцииcol в которомsize поля массива меньше 2.

Итак, я написал запрос, который выглядит так

<code>db.col.remove({'arrField':{"$size":{"$lt":2}}})
</code>

Теперь этот запрос ничего не делает. я проверил сdb.col.find() и он возвращает все документы. Что не так с этим запросом?

Ваш Ответ

3   ответа
4

что для некоторых запросов может быть целесообразно просто перечислить все значения, которые вы хотите использовать или исключить, используя (n) или условия.

В вашем примере следующий запрос даст все документы с менее чем 2 записями массива:

db.col.find({
  "$or": [
    { "arrField": {"$exists" => false} },
    { "arrField": {"$size" => 1} },
    { "arrField": {"$size" => 0} }
  ]
})
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
5

$size:

You cannot use $size to find a range of sizes (for example: arrays with more than 1 element).

Документы рекомендуют поддерживать отдельное поле размера (в данном случае arrFieldSize) с количеством элементов в массиве, если вы хотите попробовать что-то подобное.

6

а условия, чтобы сделать это:

db.col.remove({'arrField.2': {$exists: 0}})

Это удалит любой документ, который не имеет по крайней мере 3 элемента вarrField.

Error: User Rate Limit Exceeded

Похожие вопросы