我想知道是否有人知道如何按字符串长度对mongodb find()
结果进行排序。
我尝试了类似db.foo.find().sort({item.lenght:-1})
的内容,但显然不起作用。有人可以帮助我,并建议我在pymongo做同样的事情吗?
答案 0 :(得分:6)
我会亲自喜欢在聚合框架中看到很多东西(和基本的API),例如:
仅举几例。
在没有使用 $mod
运算符的模糊用法或其他方式,例如“ceil”和“floor”。但我离题了。
您的“字符串长度”属于此类别。提出有关它的JIRA问题。但是现在您可以使用mapReduce和现有的JavaScript功能:
db.collection.mapReduce(
function() {
emit( this.item.length, this.item );
},
function(key,values) {
return values;
},
{ "out": { "inline": 1 } }
)
因此,虽然确实有“mapReduce”时髦风格返回重新形状的文档,当然在数组中匹配相同长度的所有内容,它所做的是利用“mapReduce”的本质(不仅限于MongoDB)并允许在响应中对发出的“key”值进行排序。
答案 1 :(得分:5)
现在使用$strLenBytes使用聚合框架在MongoDB v3.4 +中有解决方案。鉴于以下文件:
select O.name as [Object_Name], C.text as [Object_Definition]
from sys.syscomments C
inner join sys.all_objects O ON C.id = O.object_id
--where C.text like '%table_name%'
我们可以使用
{_id: 0, name: "Bob"}
将返回3作为字节数。
答案 2 :(得分:0)
不,实际上是不可能的。 我正在处理类似的问题,我所做的是将每个对象的字符串长度存储为对象本身的属性。这绕过了问题。
如果你认为应该实施(我这样做),我建议你在JIRA中提出这个问题,因为某些原因没有那么多的选票: