Группируйте документы mongodb в две группы в зависимости от условия - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть коллекция task, в которой есть пара тысяч документов. Каждый документ имеет поле success со значением true или false. Вот пример документа:

{
    "_id" : ObjectId("5bd31f64c3a106f0392a7213"),
    "current_user_id" : 9,
    "company_id" : 239,
    "project_id" : 2,
    "user_action" : "create_project",
    "success" : true,
    "uuid" : "cf0cb41c-9c3b-4f2f-b82b-3516d2c18fc2",
    "created_at" : "2018-10-26 17:06:28.479871"
}

Я хотел бы объединить документы в два: те, у которых success: true в одном массиве, и те, у которых success: false в другом.

Я попытался сделать два запроса с фильтрами success:true для первого и success:false для другого:

db.getCollection('tasks').find({ 'company_id': 239,
                'success': true
               })

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

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

db.col.aggregate([{ $group: { _id:"$success","data" : {"$push" : "$$ROOT"}}}])
0 голосов
/ 05 ноября 2018

Вы можете получить данные несколькими способами

First way

db.collectionName.aggregate([
    {
        $facet: {
            "true": [
                {
                    $match: {
                        "success" : true
                    }
                }   
            ],
            "false": [
                {
                    $match: {
                        "success" : false
                    }
                }   
            ]
        }
    }    
])

Second way

db.collectionName.aggregate([
    {
        $group: {
            "_id": "$success",
            result: {
                $push: {
                   "current_user_id" : 1,
                    "company_id" : 1,
                    "project_id" : 1,
                    "user_action" : 1,
                    "uuid" : 1,
                    "created_at" : 1
                }
            }

        }
    }    
])

если у вас есть какие-либо вопросы, дайте мне знать.

...