mongodb #mongodb-query #aggregation-framework
#mongodb #mongodb-запрос #агрегация-фреймворк
Вопрос:
Если у меня есть объект Post
с двумя свойствами
Title
типа stringIsHomePage
типа booleanIsTagged
типа boolean
Сценарий: общее количество документов равно 100. Те IsHomePage
, для которых установлено значение true
is 20 in total
, остальные ( 80 in total
документы) — это документы со свойством IsTagged
, установленным на true
.
как я могу создать запрос для выбора всех 20 с помощью IsHomePage и случайных документов, для которых IsTagged установлено значение true с ограничением 50?
Комментарии:
1. Кажется, достаточно тривиальной находки . Требуется ли какая-либо специальная логика? возможно, вы захотите уточнить больше, предоставив пример ожидаемого конечного результата данных.
2. @ray, да, я просто обновляю вопрос
3. и причина, по которой я прошу пример агрегации, заключается в том, что я хочу использовать power of sample operator для выбора случайных документов
Ответ №1:
Вы можете использовать $unionWith
для объединения ваших 2 логики.
db.collection.aggregate([
{
"$match": {
IsHomePage: true
}
},
{
"$unionWith": {
"coll": "collection",
"pipeline": [
{
"$match": {
IsHomePage: {
$ne: true
},
IsTagged: true
}
},
{
"$sample": {
"size": 50
}
}
]
}
}
])
Вот игровая площадка Mongo для вашей справки.