Mongo DB查询多个条件

时间:2018-09-25 08:12:34

标签: mongodb

我有一个看起来像这样的Mongodb Json

SubDataFrame

我想找到条件在哪里的查询。请帮忙,因为我是mongodb的新手 courses.transitionType =完成 (PROGRESS <100 ||(PROGRESS == 100 && ASD存在错误))

并打印类似这样的结果,其中包含以下数据

{
    "_id" : "5b862ebecebe455a1744",
    "userId" : "111",
    "courses" : [
        {
            "stateName" : "statge 1",
            "courseId" : "1453",
            "courseName" : "Program Training 1",
            "duration" : 1,
            "lag" : 0,
            "courseType" : "1",
            "transitionType" : "onComplete",
            "scheduledStartDate" : ISODate("2018-07-27T16:23:14.000+05:30"),
            "scheduledEndDate" : ISODate("2018-07-27T16:23:14.000+05:30"),
            "courseProgress" : 0,
            "ASD" : ISODate("2018-09-17T23:18:30.636+05:30"),
            "score" : 0
        },
        {
            "stateName" : "stage 2",
            "courseId" : "1454",
            "courseName" : "Program Assessment 1",
            "duration" : 1,
            "lag" : 0,
            "courseType" : "2",
            "transitionType" : "onComplete",
            "scheduledStartDate" : ISODate("2018-07-28T16:23:14.000+05:30"),
            "scheduledEndDate" : ISODate("2018-07-28T16:23:14.000+05:30"),
            "courseProgress" : 0,
            "score" : 0
        },
        {
            "stateName" : "stage 3",
            "courseId" : "911",
            "courseName" : "Program Training 3",
            "duration" : 1,
            "lag" : 0,
            "courseType" : "1",
            "transitionType" : "onComplete",
            "scheduledStartDate" : ISODate("2018-07-29T16:23:14.000+05:30"),
            "scheduledEndDate" : ISODate("2018-07-29T16:23:14.000+05:30"),
            "courseProgress" : 0,
            "score" : 0
        }
    ],
    "userStatus" : 1,
    "modified" : ISODate("2018-09-12T11:49:47.400+05:30"),
    "created" : ISODate("2018-09-12T11:49:47.400+05:30"),
    "completionStatus" : "IP",
    "currentState" : {
        "courseProgress" : 0,
        "stateName" : "statge 1",
        "courseId" : "1453",
        "courseName" : "Program Training 1"
    }
}

1 个答案:

答案 0 :(得分:0)

您将必须使用具有$match阶段和$project的聚合来格式化结果。

您的请求中最棘手的部分是您希望通过课程获得答案,但是您的收藏集中的一项包含很多课程。因此,首先,您可以使用$unwind阶段来分隔每门课程

db.[CollectionName].aggregate([
{
    $unwind : '$courses'
}
{
    $match: {
        'courses.transitionType': 'onComplete',
        $or: [
                {
                    'courses.courseProgress': { $lt: 100 }
                },
                {
                    'courses.courseProgress': 100,
                    ASD: { $exists: 0 } 
                }
        ]
    }
},
{
    $project: {
        _id: '0',
        courseData: {
            userId: '$courses.userId',
            courseId: '$courses.courseId',
            courseProgress: '$courses.courseProgress'
    }
}