Mongodb 使用两组不同的条件通过聚合管道从数据库中匹配和获取数据
我在Mongodb 使用两组不同的条件通过聚合管道从数据库中匹配和获取数据,mongodb,mongoose,mongodb-query,aggregation-framework,Mongodb,Mongoose,Mongodb Query,Aggregation Framework,我在$match阶段传递了一组条件,但出于某种原因,我希望使用另一组条件获取数据。这些条件必须与“或”连用 i.e: $match(condition set1) || $match(condition set2) 条件集1: $match: { status: 'running', hero: { $in: ['superman', 'batman', 'ironman'] }, playReport: null, } 或 条件集2: Matc
$match
阶段传递了一组条件,但出于某种原因,我希望使用另一组条件获取数据。这些条件必须与“或”连用
i.e: $match(condition set1) || $match(condition set2)
条件集1:
$match: {
status: 'running',
hero: { $in: ['superman', 'batman', 'ironman'] },
playReport: null,
}
或
条件集2:
Match condition, where `lastPlayed` time should be greater than the `playReport.timestamp`
样本数据:
{
status: 'running',
hero: 'superman',
playReport: null
},
{
status: 'stopped',
hero: 'batman',
playReport: null
},
{
status: 'stopped',
hero: 'spiderman',
playReport: null
},
{
status: 'running',
hero: 'ironman',
playReport: {
timestamp: '2020-10-21T10:05:03.940+00:00'
}
lastPlayed: '2021-10-21T10:05:03.940+00:00'
},
{
status: 'running',
hero: 'batwoman',
playReport: null
},
{
status: 'stopped',
hero: 'thor',
playReport: null
}
输出:
{
status: 'running',
hero: 'superman',
playReport: null
},
{
status: 'running',
hero: 'ironman',
playReport: {
timestamp: '2020-10-21T10:05:03.940+00:00'
}
lastPlayed: '2021-10-21T10:05:03.940+00:00'
},
- 使用
$或
运算符指定这两个条件
- 要匹配内部字段,请使用带有
运算符的$gt
表达式条件$expr
Hi@turivishal,mongoose.find()方法中是否也有同样的方法。因此,我在.aggregate之后做了一个.populate,似乎两者都不兼容。是的,您可以使用
find()
方法查看
db.collection.aggregate([
{
$match: {
$or: [
{
status: "running",
hero: {
$in: ["superman", "batman", "ironman"]
},
playReport: null
},
{
$expr: {
$gt: [
"$lastPlayed",
"$playReport.timestamp"
]
}
}
]
}
}
])