根据条件将mongodb文档分为两组

时间:2018-11-05 09:54:36

标签: ruby-on-rails mongodb mongodb-query aggregation-framework mongoid

我有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进行两个查询:

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

2 个答案:

答案 0 :(得分:2)

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

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

        }
    }    
])

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

答案 1 :(得分:0)

您可以使用以下查询:

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