получить все данные по размеру массива в шаблоне Spring mongo
Предположим, у меня есть такие:
{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)
Кто-нибудь знает правильный?
2 ответа
Решение
Оператор $size не принимает параметры диапазона. Вы можете использовать наличие позиционного значения, чтобы определить размер. следующее
db.collection.find({
"tags.0": {
$exists: true
}
})
Весной вы можете попробовать следующее:
mongoTemplate.find(Query.query(Criteria.where("tags.0").exists(true)));
Вы можете использовать оператор $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
фреймворк:
db.collection.find({
tags: {
$exists: true,
$not: {
$size: 0
}
}
})