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



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

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

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

数学函数

  • 数(如对数)
  • 塞伊尔
  • 地板

数组

字符串

  • 长度

仅举几例。

这不会在"ceil"和"floor"等情况下诉诸$mod运算符或其他手段的模糊用法。但我离题了。

您的"字符串长度"属于这一类。提出一个关于它的 JIRA 问题。但是现在你可以使用mapReduce和现有的JavaScript功能:

db.collection.mapReduce(
    function() {
        emit( this.item.length, this.item );
    },
    function(key,values) {
        return values;
    },
    { "out": { "inline": 1 } }
)

因此,虽然它实际上确实具有返回重新成型的文档的"mapReduce"时髦风格,当然并且所有内容都与数组中的相同长度匹配,但它所做的是利用"mapReduce"的性质(不仅限于MongoDB)并允许发出的"键"值在响应中排序。

现在在

MongoDB v3.4 +中使用$strLenBytes的聚合框架有一个解决方案。给定以下文档:

{_id: 0, name: "Bob"}

我们可以使用

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

这将返回 3 作为字节数。

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

如果您认为应该实施(我确实如此),我建议您在JIRA中对该问题投赞成票,由于某种原因,JIRA没有那么多票数:

https://jira.mongodb.org/browse/SERVER-5319

相关内容

  • 没有找到相关文章

最新更新