Mongo DB查询使用if条件

时间:2018-09-24 18:13:35

标签: mongodb

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

{
    "userId" : "123",
    "dataArray" : [
        {
            "scheduledStartDate" : ISODate("2018-08-30T11:34:36.000+05:30"),
            "scheduledEndDate" : ISODate("2018-08-30T11:34:36.000+05:30"),
            "Progress" : 0,
            "ASD":""
        },
        {

            "scheduledStartDate" : ISODate("2018-09-22T11:34:36.000+05:30"),
            "scheduledEndDate" : ISODate("2018-10-01T11:34:36.000+05:30"),
            "Progress" : 0,
            "ASD":ISODate("2018-08-30T11:34:36.000+05:30"),
        }
    ],
    "userStatus" : 1,
    "completionStatus" : "IP",
}

我想找到条件类似这样的那些文件

(PROGRESS<100||(PROGRESS==100&&ASD not exists))

1 个答案:

答案 0 :(得分:1)

这应该可以帮助您($elemMatch):

db.collection.find({
    dataArray: {
        $elemMatch: {
            $or: [
                { Progress: { $lt: 100 } },
                { $and: [
                    { Progress: { $eq: 100 } },
                    { ASD: { $exists: false } }
                ]}
            ]
        }
    }
})
根据您的评论

更新-这甚至更容易:

db.collection.find({
    $or: [
        { "dataArray.Progress": { $lt: 100 } },
        { $and: [
            { "dataArray.Progress": { $eq: 100 } },
            { "dataArray.ASD": { $exists: false } }
        ]}
    ]
})