[英]Mongoose query for fetching documents based on conditions and between certain dates
我有一个页面,其中列出了前端的所有学生数据。 目前我正在获取所有文档,而不管它们的 showStudentProfile 状态如何。 现在,我需要根据以下条件使用 Mongoose 查询从 mongoDB 获取所有学生。
状况:
showStudentProfile === hide
&& owner === userId
( userId
是登录用户),则获取学生列表。 也就是说,他应该只能获取他自己的隐藏文件。 2.如果showStudentProfile === custom
,则如果当前日期在dateRange
字段之间,则仅获取那些文档。
showStudentProfile === yes
,则获取文档。学生模式如下:
[{
"_id": ObjectId("5f44af5a232afe415dc2bc01"),
"name" : "abc",
"sub" : ["math", "generalScience"],
"showStudentProfile" : "yes",
"dateRange" : [],
"owner": ObjectId("5f44af5a232afe415dc2bc03"),
},{
"_id": ObjectId("5f44af5a232afe415dc2bc04"),
"name" : "def",
"sub" : ["physics", "chemistry"],
"showStudentProfile" : "hide",
"dateRange" : [],
"owner": ObjectId("5f44af5a232afe415dc2bc03"),
},{
"_id": ObjectId("5f44af5a232afe415dc2bc05"),
"name" : "ghi",
"sub" : ["math", "science"],
"showStudentProfile" : "custom",
"dateRange" : [
"2020-07-28T11:14:50.652Z",
"2020-08-28T11:14:50.652Z"
],
"owner": ObjectId("5f44af5a232afe415dc2bc03"),
},{
"_id": ObjectId("5f44af5a232afe415dc2bc07"),
"name" : "xyz",
"sub" : ["physics", "chemistry"],
"showStudentProfile" : "hide",
"dateRange" : [],
"owner": ObjectId("5f44af5a232afe415dc2bc08"),
}]
我的尝试:
StudentModel.find({showStudentProfile:"hide", owner:"userId"})
但这只会获取那些showStudentProfile
为 hide 且owner
为userId
的文档。 但我还需要获取showStudentProfile
是custom
的文档,如果custom
并考虑到 currentDate,我需要获取落在dateRange
字段之间的文档。
如果userId = ObjectId("5f44af5a232afe415dc2bc03")
并考虑今天的日期,预期结果:
[{
"_id": ObjectId("5f44af5a232afe415dc2bc01"),
"name" : "abc",
"sub" : ["math", "generalScience"],
"showStudentProfile" : "yes",
"dateRange" : [],
"owner": ObjectId("5f44af5a232afe415dc2bc03"),
},{
"_id": ObjectId("5f44af5a232afe415dc2bc04"),
"name" : "def",
"sub" : ["physics", "chemistry"],
"showStudentProfile" : "hide",
"dateRange" : [],
"owner": ObjectId("5f44af5a232afe415dc2bc03"),
}];
你有三个条件,所以你可以从$match
和$or
组合 db.collection.aggregate([
db.collection.aggregate([
{
$match: {
$or: [
{
owner: ObjectId("5f44af5a232afe415dc2bc03"),
showStudentProfile: "hide"
},
{
showStudentProfile: "custom",
$expr: {
$and: [
{
$lt: [
{
$toDate: {
$arrayElemAt: [
"$dateRange",
0
]
}
},
new Date()
]
},
{
$gt: [
{
$toDate: {
$arrayElemAt: [
"$dateRange",
1
]
}
},
new Date()
]
}
]
}
},
{
showStudentProfile: "yes"
}
]
}
}
])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.