我的收藏
[
{
"_id": "value",
"data": [
{
"d": "2022-05-16",
"v": 10.06
},
{
"d": "2022-05-18",
"v": 9.11
},
{
"d": "2022-05-20",
"v": 7.06
}
],
"name": "Vegeta"
}
]
現在我想查詢說
{name : "something" , "data.d" : "2022-05-18"}
--> 這個過濾器回傳v = 9.11
{name : "something" , "data.d" : "2022-05-17"}
--> 這個過濾器也應該回傳v = 10.06
{name : "something" , "data.d" : "2022-05-19"}
--> 這個過濾器也應該回傳v = 9.11
基本上我想從匹配給定日期的資料中回傳結果,如果不存在則回傳以前的日期資料。
我試過使用 elemmatch。Unwind 對我有用,但需要提高查詢的性能。如果可能的話,我們可以在 mongo shell 本身中進行。
uj5u.com熱心網友回復:
db.collection.aggregate([
{
$match: {
"name": "Vegeta" //input
}
},
{
"$project": {
"_id": 1,
"name": 1,
"data": { //filter the array elements
"$filter": {
"input": "$data",
"as": "data",
"cond": {
"$lte": [
"$$data.d",
"2022-05-20" //input
]
}
}
}
}
},
{
$project: {
"_id": 1,
"name": 1,
"data": { //sort the remaining array elements
$sortArray: {
input: "$data",
sortBy: {
"d": -1
}
}
}
}
},
{
$project: {
"_id": 1,
"name": 1,
"data": { //pick one
"$arrayElemAt": [
"$data",
0
]
}
}
}
])
蒙戈游樂場
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/535611.html
標籤:数据库