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

时间:2012-09-17 15:48:24

标签: 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 line.

例如,this awesome little node project称为sift MongoDB启发了数组过滤。但是有更多类似的工具,不同的意见和项目合并和消失。

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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