根据条件将 mongodb 个文档分成两组

Group mongodb documents into two groups based on a condition

我有 collection task,其中有几千个文档。每个文档都有一个 success 字段,其值是 truefalse。这是一个示例文档:

{
    "_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,另一个使用 success:false

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

您可以通过几种方式获取数据

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
                }
            }

        }
    }    
])

如果您有任何问题,请告诉我。

您可以使用此查询:

db.col.aggregate([{ $group: { _id:"$success","data" : {"$push" : "$$ROOT"}}}])