我有這樣的收藏:
{
"_id" : 13965 ,
"name" : "p 1",
"sort_order" : 0,
"quantity" : 5
}
{
"_id" : 8000 ,
"name" : "p 4",
"sort_order" : 500,
"quantity" : -10
}
{
"_id" : 13980 ,
"name" : "p 2",
"sort_order" : 50,
"quantity" : 2
}
{
"_id" : 9753 ,
"name" : "p 5",
"sort_order" : 0,
"quantity" : 0
}
{
"_id" : 2000 ,
"name" : "p 3",
"sort_order" : 6,
"quantity" : 1
}
{
"_id" : 65230,
"name" : "p 6",
"sort_order" : 20,
"quantity" : 0
}
排序后,我希望它看起來像這樣:
{
"_id" : 13980 ,
"name" : "p 2",
"sort_order" : 50,
"quantity" : 2
}
{
"_id" : 2000 ,
"name" : "p 3",
"sort_order" : 6,
"quantity" : 1
}
{
"_id" : 13965 ,
"name" : "p 1",
"sort_order" : 0,
"quantity" : 5
}
{
"_id" : 8000 ,
"name" : "p 4",
"sort_order" : 500,
"quantity" : -10
}
{
"_id" : 65230,
"name" : "p 6",
"sort_order" : 20,
"quantity" : 0
}
{
"_id" : 9753 ,
"name" : "p 5",
"sort_order" : 0,
"quantity" : 0
}
我希望所有quantity零或低于零的案例都位于串列的末尾,其余的按sort_order. 這個Mysql查詢作業:
SELECT product_id,quantity,sort_order FROM product ORDER by quantity <=0 ASC , sort_order DESC
但我需要mongoDB:))
uj5u.com熱心網友回復:
試試這個:
db.collection.aggregate([
{
$addFields: {
sortQuantity: { $cond: [ { $lte: ["$quantity", 0 ] }, 0, 1 ] }
}
},
{
$sort: {
sortQuantity: 1,
sort_order: -1
}
},
{ $unset: "sortQuantity" }
])
蒙戈游樂場
uj5u.com熱心網友回復:
您可以使用
$facet收到的資料分類成quantity>0和quantity <=0$sort按預期排序$concatArray將兩個陣列合并為一個陣列$unwind解構陣列$replaceRoot使解構變數為根
這是 ocde
db.collection.aggregate([
{
"$facet": {
"lteZero": [
{
$match: {
$expr: {
$lte: [ "$quantity", 0 ]
}
}
},
{ $sort: { sort_order: -1, quantity: 1 } }
],
"gtZero": [
{
$match: {
$expr: {
$gt: [ "$quantity", 0 ]
}
}
},
{ $sort: { sort_order: -1, quantity: 1 } }
]
}
},
{
"$project": {
combined: {
"$concatArrays": [ "$gtZero", "$lteZero" ]
}
}
},
{ "$unwind": "$combined" },
{ "$replaceRoot": { "newRoot": "$combined" } }
])
作業Mongo游樂場
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/407534.html
標籤:
