$ elemMatch中的$或声明

use*_*904 15 mongodb nosql mongodb-query

有没有办法在元素匹配中执行$或语句?

我有这个:

opened: {
    $elemMatch: {
        closed: false
        openingEvening: {$lte: currentTime}, 
        closingEvening: {$gte: currentTime},
    }
}
Run Code Online (Sandbox Code Playgroud)

并希望将openMorning添加到l

如何将其扩展为:

opened: {
    $elemMatch: {
        closed: false
        {$or: [
            {openingEvening: {$lte: currentTime}, closingEvening: {$gte: currentTime},},
            {openingMorning: {$lte: currentTime}, closingMorning: {$gte: currentTime}}
         ]
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是可能的吗?

Nei*_*unn 24

当然是,只是清理语法,但你基本上有它:

{
    "opened": {
        "$elemMatch": {
            "closed": false,
            "$or": [
                {
                    "openingEvening": { "$lte": currentTime  },
                    "closingEvening": { "$gte": currentTime  }
                },
                {
                    "openingMorning": { "$lte": currentTime },
                    "closingMorning": { "$gte": currentTime  }
                }

            ]
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并给出了数据的样本概念:

{
    "_id" : ObjectId("537969cee90c3db84958aa86"),
    "opened" : [
            {
                    "closed" : false,
                    "openingEvening" : 17,
                    "closingEvening" : 22,
                    "openingMorning" : 11,
                    "closingMorning" : 14
            }
    ]
}
{
    "_id" : ObjectId("53796a47e90c3db84958aa87"),
    "opened" : [
            {
                    "closed" : false,
                    "openingMorning" : 13,
                    "closingMorning" : 14
            }
    ]
}
Run Code Online (Sandbox Code Playgroud)

当前时间12将匹配第一个但不匹配第二个文档,但值13将匹配两者.

还注意到这些都在一个数组内,所以考虑到你的估计目的,你可能想要一个"dayOfWeek"字段也包括在那里