所以我正在尝试做一些可以将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
}
}
答案 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 ] }
}
}
}
}
}
])