Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb/pymongo中按字符串长度排序_Mongodb_Sorting_Mapreduce_Aggregation Framework_Pymongo - Fatal编程技术网

Mongodb/pymongo中按字符串长度排序

Mongodb/pymongo中按字符串长度排序,mongodb,sorting,mapreduce,aggregation-framework,pymongo,Mongodb,Sorting,Mapreduce,Aggregation Framework,Pymongo,我想知道是否有人知道如何按字符串长度对mongodbfind()结果进行排序 我尝试过类似于db.foo.find().sort({item.lenght:-1})的方法,但显然不起作用。有人能帮助我,并建议我一种方法来做同样的事情,但在pymongo?我个人喜欢在聚合框架中看到很多东西(和基本API),例如: 数学函数 对数(如对数) 细胞 地板 排列 总数 一串 长度 仅举几个例子 也就是说,在诸如“ceil”和“floor”这样的情况下,不必使用$mod操作符或其他手段的模糊用

我想知道是否有人知道如何按字符串长度对mongodb
find()
结果进行排序

我尝试过类似于
db.foo.find().sort({item.lenght:-1})
的方法,但显然不起作用。有人能帮助我,并建议我一种方法来做同样的事情,但在pymongo?

我个人喜欢在聚合框架中看到很多东西(和基本API),例如:

数学函数
  • 对数(如对数)
  • 细胞
  • 地板
排列
  • 总数
一串
  • 长度
仅举几个例子

也就是说,在诸如“ceil”和“floor”这样的情况下,不必使用
$mod
操作符或其他手段的模糊用法。但我离题了

您的“字符串长度”属于此类别。提出一个关于它的JIRA问题。但现在您可以使用和使用现有的JavaScript功能:

db.collection.mapReduce(
函数(){
发射(this.item.length,this.item);
},
功能(键、值){
返回值;
},
{“out”:{“inline”:1}
)

因此,虽然它确实具有“mapReduce”的时髦风格,即返回一个重新成形的文档,当然数组中的所有内容都匹配相同的长度,但它所做的是利用“mapReduce”的特性(不仅限于MongoDB),并允许在响应中对发出的“key”值进行排序。

No,其实是不可能的。 我正在处理一个类似的问题,我所做的是将每个对象的字符串长度存储为对象本身的属性。这绕过了问题

如果你认为应该实施(我同意),我建议你在吉拉投票,因为某些原因,吉拉没有那么多选票:


在MongoDB v3.4+中,现在有了一个解决方案,使用聚合框架。鉴于以下文件:

{_id: 0, name: "Bob"}
我们可以使用

db.mycollection.aggregate([{
    $project: {
         byteLength: {$strLenBytes: "$name"}
    }
}])

它将返回3作为字节数。

AFAIK mongodb不支持对字符串长度的操作。例如,当字符串长度小于或大于某个值时,不能进行查询。我通常会为此任务编写一个js脚本。聚合函数呢?@Dikesh我真的希望这是可能的,但目前不是。看到答案了。实际上应该是
[{“$addFields”:{“len”:{“$strLenBytes”:“$name”}},{“$sort”:{“len”:1},{“$project”:{“len”:0}]
以完全复制OP请求的操作,该操作返回“原样”但已排序的文档。值得一提。@NeilLunn是的,我只是专注于返回长度,而不是排序,因为我觉得排序非常直接,请随意更改答案以涵盖两者。