MongoDB-匹配多个相同值的字段

时间:2019-04-18 07:36:07

标签: mongodb mongodb-query

所以我正在尝试做一些可以将MongoDB字段分组以进行检查的事情。

鉴于我具有以下数据结构:

{
//Some other data fields
created: date,
lastLogin: date,
someSubObject: {
    anotherDate: date,
    evenAnotherDate: date
}

关于这些,我想进行如下检查:

collection.aggregate([
{
    $match: {
        "created": {
            $lt: lastWeekDate
        },
        "someSubObject.anotherDate": {
            $lt: lastWeekDate
        },
        "lastLogin": {
            $lt ...

是否可以对字段进行分组并执行类似的操作

$match: {
    [field1, field2, field3]: {
        $lt: lastWeekDate
    }
}

1 个答案:

答案 0 :(得分:1)

您需要$expr使用$map来生成布尔值数组,然后需要$allElementsTrue来应用AND条件

db.collection.find({
    $expr: {
        $allElementsTrue: {
            $map: {
                input: [ "$field1", "$field2", "$field3" ],
                in: { $lt: [ "$$this", lastWeekDate ] }
            }
        }
    }
})

编辑:如果您需要该逻辑作为聚合的一部分,则可以使用$match,它等效于find

db.collection.aggregate([
    {
        $match: {
            $expr: {
                $allElementsTrue: {
                    $map: {
                        input: [ "$field1", "$field2", "$field3" ],
                        in: { $lt: [ "$$this", lastWeekDate ] }
                    }
                }
            }
        }
    }
])