我正在尝试从集合中对数据进行排序。我可以使用数字和布尔值进行排序。在我的情况下,我想要使用看起来像整数的参数排序,但它在数据库中保存为字符串。
注意:我无法将 ItemRef 更改为数据库中的整数数据类型。
mongo集合中的数据:
{
"_id":ObjectId("56ccd6b5267ecf0528008e80"),
"UserId":ObjectId("56ccd6b5267ecf0528008e06"),
"ItemRef":"AA008",
"Name":"Sample12"
},
{
"_id":ObjectId("56ccd6b5267ecf0528008e95"),
"UserId":ObjectId("56ccd6b5267ecf0528008e06"),
"ItemRef":"560",
"Name":"Sample"
},
{
"_id":ObjectId("56ccd6b5267ecf0528008e90"),
"UserId":ObjectId("56ccd6b5267ecf0528008e06"),
"ItemRef":"5010",
"Name":"Sample1"
},
{
"_id":ObjectId("56ccd6b5267ecf0528008e91"),
"UserId":ObjectId("56ccd6b5267ecf0528008e06"),
"ItemRef":"5060",
"Name":"Sample2"
},
{
"_id":ObjectId("56ccd6b5267ecf0528008e92"),
"UserId":ObjectId("56ccd6b5267ecf0528008e06"),
"ItemRef":"1080",
"Name":"Sample4"
}
查询:
db.parrot.users.aggregate([
{$match:{ "UserId" : ObjectId("56ccd6b5267ecf0528008e06")},
{$sort:{"ItemRef":1}}
])
不是使用 ItemRef
进行排序预期结果:
{
"_id":ObjectId("56ccd6b5267ecf0528008e95"),
"UserId":ObjectId("56ccd6b5267ecf0528008e06"),
"ItemRef":"560",
"Name":"Sample"
},
{
"_id":ObjectId("56ccd6b5267ecf0528008e92"),
"UserId":ObjectId("56ccd6b5267ecf0528008e06"),
"ItemRef":"1080",
"Name":"Sample4"
}
{
"_id":ObjectId("56ccd6b5267ecf0528008e90"),
"UserId":ObjectId("56ccd6b5267ecf0528008e06"),
"ItemRef":"5010",
"Name":"Sample1"
},
{
"_id":ObjectId("56ccd6b5267ecf0528008e91"),
"UserId":ObjectId("56ccd6b5267ecf0528008e06"),
"ItemRef":"5060",
"Name":"Sample2"
},
{
"_id":ObjectId("56ccd6b5267ecf0528008e80"),
"UserId":ObjectId("56ccd6b5267ecf0528008e06"),
"ItemRef":"AA008",
"Name":"Sample12"
}
答案 0 :(得分:0)
零填充可以解决问题。例如,存储560为0560。但它仍然是黑客。我不认为如果将mongo存储为字符串,它可以将其排序为数字。
答案 1 :(得分:0)
-如果需要结果,请尝试执行此查询
db.parrot.aggregate([
{$match:{ "UserId" : ObjectId("56ccd6b5267ecf0528008e06")}},
{$sort:{"ItemRef":1}}
],{ collation: { locale: "en_US", numericOrdering: true } });