Node.JS MongoDB排序/过滤功能是否在数据库之外可用?

Node.JS MongoDB排序/过滤功能是否在数据库之外可用?,node.js,mongodb,sorting,filter,filtering,Node.js,Mongodb,Sorting,Filter,Filtering,MongoDB排序功能非常简洁。您可以在与数据库本身无关的对象和/或数组上使用它们吗 var mongo = require('mongodb'), Server = mongo.Server, Db = mongo.Db, sortingFun = mongo.internalSortFilterFunction(); // By the miracle of imagination, this is a made-up lin

MongoDB
排序功能非常简洁。您可以在与数据库本身无关的对象和/或数组上使用它们吗

var mongo       = require('mongodb'),
    Server      = mongo.Server,
    Db          = mongo.Db,
    sortingFun  = mongo.internalSortFilterFunction(); // By the miracle of imagination, this is a made-up line.
例如,有一种叫做
sift
:MongoDB风格的数组过滤。但有更多类似的工具、不同的观点和项目在合并和消失


考虑到它的受欢迎程度,
MongoDB
很可能会继续流行下去。出于这个原因,再加上完全相似而不是非常相似的额外好处,我想知道节点mongodb中的特定对象/模型/函数是否可以从
require('mongodb')
链接,专门用于在自定义对象/数组上使用排序和过滤功能。

排序是在mongo服务器中完成的,不是客户。它也不是特别快——大型收藏应该预先分类,但这是另一个问题

蒙哥服务器是用C++编写的,使用自定义类型,与JS引擎分开,称为BSON.

因此,如果javascript的客户端上没有排序实现,这将是一个荒谬的特性,那么就不能使用服务器排序

编辑:如果你真的想使用排序,那么你可以在数据库中插入js对象,有效地将它们转换成mongo集合中的BSON。然后对其进行排序并将其从数据库中拉出。每次调用该函数都需要重新创建索引等。Mongodb也拒绝对大型集合进行排序,而无索引(我认为限制在1000左右)


顺便说一句,我还没有读到消息来源。我无法想象一个JS实时、无索引的排序能够与MongoDB的排序速度相匹配,尤其是在分布式(分片)时。但是你可以在C++中编写NoDE.js模块,如果BSON与V8JS对象相似(不这么认为),你就可以把它移植到它上面。我不会走这条路,因为与在JS中重新实现相比,它可能不会有太大的速度提升,重新实现会更容易创建和维护。

谢谢。清楚的除非在Mongo查询之后内存中有一个特定的小集合,并且希望以几种不同的方式过滤这些集合,否则基于JS的排序很方便,使用MongoDB排序克隆,如
sift
,您可以重新使用您首先提供给MongoDB的筛选对象。关于编辑的最后一行:是否需要为每个可排序字段编制索引?每个可过滤字段都需要索引吗?@Redsandro是的,我想内存排序在JS中很有用。但mongodb不太可能提供这种功能——Mongo中的JS实际上只是一个客户端。关于索引的排序和筛选:可排序字段/should/应编入索引,但当文档太多时/must/必须编入索引。我不认为这同样适用于过滤字段(我从未使用过过滤器,但我认为它映射到我使用的$exists)。为它们编制索引只是为了确定,这就是我所做的。
Mongodb也拒绝对大型集合进行排序sans Index
您有相关链接吗?这篇文章:详细介绍了由于复合键不匹配而导致的排序失败。复制、创建大量
{x:[0..n]}
文档并尝试对
x
进行排序非常容易。