[英]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.