在mongodb中使用find()对字段排序

在mongodb中使用find()对字段排序,mongodb,mongodb-query,aggregation-framework,mongojs,Mongodb,Mongodb Query,Aggregation Framework,Mongojs,全部! 我的文件的结构如下: { fname: value, lname: value, city: value } 当我使用find()方法时,我以默认顺序fname、lname、city获取结果。 但我想按字段的其他顺序得到结果,例如:city,fname,lname。 mongodb允许字段在结果中排序吗?是和否。要真正进行这种操作,您需要。即使这样,也有点棘手,因为必须“重命名”字段才能更改其顺序。这是因为有一些通用的优化,可以将内容从一个“管道”阶段“复制”到

全部! 我的文件的结构如下:

{
    fname: value,
    lname: value,
    city: value
}
当我使用find()方法时,我以默认顺序fname、lname、city获取结果。 但我想按字段的其他顺序得到结果,例如:city,fname,lname。
mongodb允许字段在结果中排序吗?

是和否。要真正进行这种操作,您需要。即使这样,也有点棘手,因为必须“重命名”字段才能更改其顺序。这是因为有一些通用的优化,可以将内容从一个“管道”阶段“复制”到另一个“管道”阶段。这被认为是最佳的

但您始终可以这样做:

db.collection.aggregate([
{“$project”:{
“tcity”:“$city”,
“tfname”:“$fname”,
“tlname”:“$lanme”
}},
{“$project”:{
“城市”:“$tcity”,
“fname”:“$tfname”,
“lname”:“$tlname”
}}
])
很做作,但你必须这样做。或者,只需按照您想要的顺序使用“重命名”字段的单个投影,然后在代码中再次“重命名”

当然,您的代码也可以简单地从查询结果“重新映射”字段名


但最基本的一点是,MongoDB本身“保留”了字段的原始顺序,作为对其存储方式的“优化”,不会影响输出。如果您愿意,您可以,但是您需要按照所示的步骤来执行。

我假设您指的是Mongo shell中显示的输出?如果是这样,您可以将返回的输出分配给一个变量(我相信是游标),然后在以任意顺序输出各个字段变量的同时逐步遍历游标。

您可以使用
.sort()
。例如:

db.stocks.find().sort( { ticker: 1, date: -1 } )

有关详细信息,请参见

,但是此投影是否默认排序,或者我们需要调用sort()方法。@vmr字段顺序和结果排序是两件不同的事情。排序应用于内容而不是字段名。我认为这里的普遍共识是,虽然您“可以”强制MongoDB按特定顺序输出字段,但您“应该”处理的一般方式是“在”返回结果之后。我只是想证明你“可以”来证明这样做是非常荒谬的。我很好奇你为什么关心字段的顺序。你可能试图解决错误的问题。