我正在查询基于属性的集合和排序结果。有些文件不是那个属性值,即null。我想在排序和限制(asc或desc)之后在结果的末尾保留带有空值的文档。 Mongoose有一种简单的方法可以使用单个查询吗? 如果没有,我怎么能分别使用两个查询,因为我必须限制分页的结果?
var dealSchema = new Schema({
// For Presentation Purposes Only
dealId: { type: Number, index: true, unique: true },
// BRAND Info
brand: { type: ObjectId, ref: 'brand', index: true },
brandUser: { type: ObjectId, ref: 'user', index: true, required: true },
campaign: { type: ObjectId, ref: 'campaign', index: true },
metrics: {
totalCost: Number,
totalValue: Number,
roi: { type: Number, index: true },
cpe: { type: Number, index: true }
}
})
我想基于'metrics.cpe'按升序排序,但希望null或0值位于列表的末尾。例如:
[0.1, 0.4, 0.7, 1.5, 2.5, 0, 0, null, null]
示例文档
{
"_id": "590cdf29c102ae31208fa43a",
"campaign": "587e6a880c844c6c2ea01563",
"brand": "5a4cff5f8eaa1c26ca194acc",
"brandUser": "57fd30cf0df04f1100153e07",
"metrics": {
"roi": 0,
"cpe": 0,
"totalValue": 0,
"totalCost": 6000
}
}
答案 0 :(得分:0)
我不确定解决方案即将发言。我无法测试这个,因为我现在没有设置mongo数据库,但我认为您可以使用<collection>.aggregate
以及$project
和$sort
来实现此目的。
示例代码:
db.inventory.aggregate(
[
{
$project: {
item: 1,
description: { $ifNull: [ "$amount", -1*(<mimimum value>)* ] }
}
},
{
$sort : {
amount : (-1 or 1 depending on the order you want)
}
}
]
)
希望这会有所帮助!!