0

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.

例如,有一个很棒的小节点项目,名为siftMongoDB 启发的数组过滤。但是有更多类似的工具,不同的意见,以及合并和消失的项目。

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

4

1 回答 1

0

排序是在 mongo 服务器中完成的,而不是在客户端。它也不是特别快——大集合应该预先排序,但这是另一个问题。

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

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

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

PS。我没有读过源码。我无法想象与 MongoDB 的排序速度相匹配的 JS 实时、无索引排序。分布(分片)时。但是你可以用 C++ 编写 node.js 模块,如果 BSON 与 V8 JS 对象足够相似(不这么认为),你也许可以移植它。我不会走这条路,因为与在 JS 中重新实现它相比,它可能不会有很大的速度提升,这种重新实现将更容易创建和维护。

于 2012-09-17T16:00:54.170 回答