получить все данные по размеру массива в шаблоне spring mon go - PullRequest
0 голосов
/ 28 мая 2020

Предположим, у меня есть:

{id: 1, name: name1, tags: [{id: 1, name: tag1}]},
{id: 2, name: name2, tags: []},
{id: 3, name: name3, tags: [{id: 3, name: tag3}, {id:33, name: tag33}]},
{id: 4, name: name4}

Затем выполните запрос, и я хочу следующее:

{id: 1, name: name1, tags: [{id: 1, name: tag1}]},
{id: 3, name: name3, tags: [{id: 3, name: tag3}, {id:33, name: tag33}]}

Получение документов с массивом «тегов» и его размер больше 0 . Но не знаю, как создать свои критерии.

Я пробовал это, но выдает ошибку, говоря, что size () должен принимать аргумент int ...

where(tags).size().gt(0)

Anyone знает правильный?

Ответы [ 2 ]

0 голосов
/ 28 мая 2020

Вы можете использовать $ not оператор:

where("tags").not().size(0).andOperator(where("tags").exists(true));

db.collection.find({
  "tags": {
    "$not": {
      "$size": 0
    }
  },
  "$and": [
    {
      "tags": {
        "$exists": true
      }
    }
  ]
})

Альтернатива: Вы не можете создать это с помощью Spring-data-mongo framework:

db.collection.find({
  tags: {
    $exists: true,
    $not: {
      $size: 0
    }
  }
})
0 голосов
/ 28 мая 2020

Оператор '$ size' не принимает параметры диапазона. Вы можете использовать наличие позиционного значения, чтобы определить размер. следующим образом

db.collection.find({
  "tags.0": {
    $exists: true
  }
})

Весной вы можете попробовать следующее:

mongoTemplate.find(Query.query(Criteria.where("tags.0").exists(true)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...