我正在浏览mongo db索引,当我在多键字段上创建索引并尝试对结果进行排序时,行为很奇怪。 例如:
> db.testIndexes.find();
{ "_id" : ObjectId("584e6ca8d23d3b48f9cb819d"), "type" : "depart", "item" : "aaa", "ratings" : [ 5, 8, 9 ] }
{ "_id" : ObjectId("584e6cb2d23d3b48f9cb819e"), "type" : "depart", "item" : "aaa", "ratings" : [ 2, 3, 4 ] }
{ "_id" : ObjectId("584e6cbdd23d3b48f9cb819f"), "type" : "depart", "item" : "aaa", "ratings" : [ 10, 6, 1 ] }
db.testIndexes.createIndex({ratings:1});
现在,如果我起诉这些问题:
db.testIndexes.find().sort({ratings:1}).pretty();
结果就像这样
{
"_id" : ObjectId("584e6cbdd23d3b48f9cb819f"),
"type" : "depart",
"item" : "aaa",
"ratings" : [
10,
6,
1
]
}
{
"_id" : ObjectId("584e6cb2d23d3b48f9cb819e"),
"type" : "depart",
"item" : "aaa",
"ratings" : [
2,
3,
4
]
}
{
"_id" : ObjectId("584e6ca8d23d3b48f9cb819d"),
"type" : "depart",
"item" : "aaa",
"ratings" : [
5,
8,
9
]
}
和查询
db.testIndexes.find().sort({ratings:-1}).pretty();
结果是:
{
"_id" : ObjectId("584e6cbdd23d3b48f9cb819f"),
"type" : "depart",
"item" : "aaa",
"ratings" : [
10,
6,
1
]
}
{
"_id" : ObjectId("584e6ca8d23d3b48f9cb819d"),
"type" : "depart",
"item" : "aaa",
"ratings" : [
5,
8,
9
]
}
{
"_id" : ObjectId("584e6cb2d23d3b48f9cb819e"),
"type" : "depart",
"item" : "aaa",
"ratings" : [
2,
3,
4
]
}
由于结果似乎没有遵循和顺序所以任何人都可以帮助mongo如何排序这些结果。
感谢
Virendra
答案 0 :(得分:2)
好吧,结果似乎没有遵循任何顺序,但实际上它们是。在您的第一个排序{ratings:1}
中,这里发生的是结果按评级中的最小元素排序。由于这些是您的清单:
[ 10, 6, 1 ] [ 2, 3, 4 ] [ 5, 8, 9 ]
因此列表[ 10, 6, 1 ]
最小元素为1
,列表[ 2, 3, 4 ]
最小元素为2
,列表[ 5, 8, 9 ]
最小元素为5
}。所以结果以这种方式排序。
按降序排序时,会按照评分中的最大元素进行相同的顺序。
希望这有帮助。