MongoDB自定义排序顺序,用于带分页的查询
我在具有此架构的 MongoDB 集合中有一些文档:
{
"_id": {
"$oid": "60c1e8e318afd80016ce58b1"
},
"searchPriority": 1,
"isLive": false,
"vehicleCondition": "USED",
"vehicleDetails": {
"city": "Delhi"
}
},
{
"_id": {
"$oid": "60c1f2f418afd80016ce58b5"
},
"searchPriority": 2,
"isLive": false,
"vehicleCondition": "USED",
"vehicleDetails": {
"city": "Delhi"
}
},
{
"_id": {
"$oid": "60cb429eadd33c00139d2be7"
},
"searchPriority": 1,
"isLive": false,
"vehicleCondition": "USED",
"vehicleDetails": {
"city": "Gurugram"
}
},
{
"_id": {
"$oid": "60c21be618afd80016ce5905"
},
"searchPriority": 2,
"isLive": false,
"vehicleCondition": "USED",
"vehicleDetails": {
"city": "New Delhi"
}
},
{
"_id": {
"$oid": "60e306d29e452d00134b978f"
},
"searchPriority": 3,
"isLive": false,
"vehicleCondition": "USED",
"vehicleDetails": {
"city": "New Delhi"
}
}
vehicleCondition可以是NEWor USED,isLive可以是trueor ,false并且searchPriority是 1 到 3 之间的一个整数。(数字越小意味着它在搜索结果中应该越高)
在这里,除了_id其他字段都不是唯一的。我在isLive,vehicleDetails.city和上创建了一个复合索引 searchPriority。
在我的应用程序中,我将执行一些这种形式的查询:
- 查找所有汽车,其中
isLiveistrue、vehicleDetails.cityisDelhi或New DelhiorGurugram和vehicleConditionis
USED(orNEW)。
为此,我可以执行这样的查找查询:
db.collection.find({"isLive": true, "vehicleDetails.city": { $in: [ "Gurugram", "Delhi", "New Delhi" ] }, "vehicleCondition": "USED" }, {})
我希望此查询的结果按以下顺序排序:
- 属于
$in查找查询中 arrray 中第一个城市的所有汽车,具有最低优先级 $in在查找查询中属于第一个城市的所有汽车,具有第二低的优先级- 属于
$in查找查询中 arrray 中第一个城市的所有汽车,具有第三低的优先级 $in在查找查询中属于第二个城市的所有汽车,具有最低优先级$in在查找查询中属于第二个城市的所有汽车,具有第二低的优先级$in在查找查询中属于第二个城市的所有汽车,具有第三低的优先级 在查找查询中属于第三个城市的所有汽车$in,具有最低的优先级$in在查找查询中属于第三个城市的所有汽车,具有第二低的优先级$in在查找查询中属于第三个城市的所有汽车,具有第三低的优先级
我怎样才能做到这一点?由于此查询返回的文档数量可能非常大,因此我将使用分页来限制返回文档的数量。这个额外的要求对这个问题的可能解决方案有什么影响吗?