如何在MongoDB中自然查询和排序?
How to query and sort natually in MongoDB?
我有一个 mongoDB
包含数百万个文档。
我想查询数据库并使用特定字段对结果进行自然排序。
从 Mongo 文档看来,似乎只支持朴素排序。
有没有办法自然排序?
示例:
- 文档 1 _id: "abc10.def"
- 文档 2 _id: "abc2.def"
- 文档 3 _id: "abc1.def"
查询:
db_collection.find({}).sort({_id: 1})
returns 按顺序排列的列表:
- doc3 ("abc1.def")
- doc1 ("abc10.def")
- doc2 ("abc2.def")
如何排序才能收到以下列表?:
- doc3 ("abc1.def")
- doc2 ("abc2.def")
- doc1 ("abc10.def")
这里的问题是较短的字符串应该在较长的字符串之前返回,然后您应该按字母顺序对具有相同长度的字符串进行排序。为此,您需要一个临时字段 length
,可以使用 $strLenBytes 添加该字段。
db.col.aggregate([
{
$addFields: {
length: { $strLenBytes: "$_id" }
}
},
{
$sort: {
length: 1, _id: 1
}
},
{
$project: {
length: 0
}
}
])
我有一个 mongoDB
包含数百万个文档。
我想查询数据库并使用特定字段对结果进行自然排序。
从 Mongo 文档看来,似乎只支持朴素排序。 有没有办法自然排序?
示例:
- 文档 1 _id: "abc10.def"
- 文档 2 _id: "abc2.def"
- 文档 3 _id: "abc1.def"
查询:
db_collection.find({}).sort({_id: 1})
returns 按顺序排列的列表:
- doc3 ("abc1.def")
- doc1 ("abc10.def")
- doc2 ("abc2.def")
如何排序才能收到以下列表?:
- doc3 ("abc1.def")
- doc2 ("abc2.def")
- doc1 ("abc10.def")
这里的问题是较短的字符串应该在较长的字符串之前返回,然后您应该按字母顺序对具有相同长度的字符串进行排序。为此,您需要一个临时字段 length
,可以使用 $strLenBytes 添加该字段。
db.col.aggregate([
{
$addFields: {
length: { $strLenBytes: "$_id" }
}
},
{
$sort: {
length: 1, _id: 1
}
},
{
$project: {
length: 0
}
}
])