Articles of sorting

在mongodb中如何维护sorting的属性?

根据问题的答案,对象的属性顺序不能保证。 那么当我们将多个sorting字段作为对象传递时,MongoDB中的sorting函数如何完美地工作呢? db.users.find({}).sort({firstName: 1, age:-1}).exec(callback); mongodb如何知道它首先必须按姓氏sorting然后按年龄sorting? 它是在错误的假设上工作吗?

在mongoDB中使用虚拟字段sorting(mongoose)

比方说,我有一些像这样的虚拟领域的架构 var schema = new mongoose.Schema( { name: { type: String } }, { toObject: { virtuals: true }, toJSON: { virtuals: true } }); schema.virtual("name_length").get(function(){ return this.name.length; }); 在查询中可以通过虚拟字段对结果进行sorting? 就像是 schema.find().sort("name_length").limit(5).exec(function(docs){ … }); 当我尝试这个,结果很简单,没有sorting…

Elasticsearch – 按优先级例外进行过滤和按名称sorting

我试图按优先级例外进行过滤和名称sorting,这意味着即使结果按字母顺序sorting,我也希望首先出现一个特定的名称。 例如 – 这是我的基本查询 { "from": 0, "size": 500, "min_score": 0.15, "query": { "filtered": { "filter": { "bool": { "must": [ { "exists": { "field": "brand.id" } } ] } } } }, "sort": [ { "brand.names.1.raw": "asc" } ] } 简而言之,我希望这个数组[“百事可乐”,“可口可乐”,“可口可乐”]按照“可口可乐”的优先顺序进行sorting,从而将其sorting为“可口可乐” ,“可口可乐”,“百事可乐”] 现在它按字母顺序sorting。 我想到了一些可行的想法: 通过“匹配”增加一个“应该”。 但后来我有sorting“_score”的问题,它打破了我的字母sorting,虽然我首先按“_score”和品牌名称sorting。 添加到“bool”中的示例:“should”:[{“match”:{“brand.id”:{“query”:34709,“boost”:20}}} 我尝试了“聚合”,以便第一个查询(桶)将“匹配”具体的品牌名称和sortingalphabeticaly里面,第二个查询将按字母sorting只。 但我完全搞砸了。 我必须使用过滤 – >filter,我不能使用脚本查询。 谢谢。 更新这里是一个文件的例子,以及它如何sorting。 […]

在写入到nodejs中的文件之前对数据stream进行sorting

我有一个input文件,可能包含高达1M的logging,每个logging看起来像这样 field 1 field 2 field3 \n 我想读取这个input文件,并在写入到另一个文件之前,根据field3进行sorting。 这是我到目前为止 var fs = require('fs'), readline = require('readline'), stream = require('stream'); var start = Date.now(); var outstream = new stream; outstream.readable = true; outstream.writable = true; var rl = readline.createInterface({ input: fs.createReadStream('cross.txt'), output: outstream, terminal: false }); rl.on('line', function(line) { //var tmp = line.split("\t").reverse().join('\t') + '\n'; //fs.appendFileSync("op_rev.txt", […]

如何最好地通过meteor“尾巴”在蒙戈的大集合?

我有一个在Mongo数据库的集合,我追加了一些loggingtypes的信息。 我试图找出在meteor应用程序中“tail -f”的最有效/最简单的方法 – 当一个新文档被添加到集合中时,它应该被发送给客户端,客户端应该将其追加到最后集合中的当前文档集合。 客户不会被发送,也不会收集所有的文件,可能只是最后的100左右。 现在,从Mongo的angular度来看,我看不出有什么办法说“集合中的最后N个文件”,这样我们就根本不需要应用任何types的文件。 似乎最好的select是自然sorting降序,然后是一个限制调用,所以就像在mongo文档中列出的$ natural db.collection.find().sort( { $natural: -1 } ) 因此,在服务器端AFAICT发布这个“最后100个文件”meteor收集的方式是这样的: Meteor.publish('logmessages', function () { return LogMessages.find({}, { sort: { $natural: -1 }, limit: 100 }); }); 现在,从“尾巴-f”的angular度来看,这似乎具有将“最后100个文档”发送到服务器的正确效果,但是以错误的顺序发送(最新的文档将在Meteor集合的开始处而不是最后)。 在客户端,这似乎意味着需要(不幸地)颠倒收集。 现在,我没有看到Meteor Collection文档中的 reverse(),并且按照$ natural:1的顺序进行sorting(这似乎是合理的,因为没有真正的Mongo上下文)。 在某些情况下,消息在文档中会有时间戳,客户端可以通过sorting来获得“自然顺序”,但是这看起来有点怪异。 无论如何,我觉得我可能错过了一个简单得多的方法,通过meteor从mongo发布了一个活的“最后100个文档插入到集合中”。 🙂 谢谢! 编辑 – 看起来像是如果我把Mongo中的集合更改为capped集合,那么服务器可以创build一个可拖动的光标,以便高效(快速)获得添加到集合中的新文档的通知。 然而,我不清楚是否/如何让服务器通过Meteor集合来实现。 另一种看起来效率稍低但不需要切换到加盖集合(AFAICT)的替代方法是使用智能集合来实现oplog的拖尾操作,因此至less它是事件驱动的,而不是轮询,并且由于源代码中的所有操作收集将被插入,似乎它仍然是非常有效的。 不幸的是,AFAICT我仍然留下sorting的问题,因为我没有看到如何定义服务器端收集为'最后100个文件插入'。 🙁 如果有一种方法可以在Mongo中创build一个集合来查询另一个(“sorting”的“物化视图”),那么也许我可以在Mongo中创build一个日志最后100个“集合视图”,然后Meteor将能够只是发布/订阅整个伪collections?

为什么数组数组,更多的数据sorting比对象数组更快,在Javascript中的数据更less?

对于我在node.js中的应用程序,我必须根据某个数值(即数字级别)以降序排列数组的元素。 由于我的应用程序对性能至关重要,因此我决定构build我的数据结构,以便优化sorting。 我假设数组中每个元素所包含的数据越less,sorting的速度就越快。 为了testing我的假设,我运行了三个不同的长度为10000的数组: 编辑 :伙计们,似乎有什么东西与我原来的testing有瑕疵。 第一个testing比以下testing花费的时间要长得多。 因此,我已经修改了我的testing代码,在实际sorting之前有一个“缓冲区”sorting。 此外,为了减lesstesting本身的sorting可能导致的任何偏差,我将testing的顺序进行了固定数量的试验。 我已经修改了相应的结果。 完整的源代码在这里: https : //raw.githubusercontent.com/youngrrrr/js-array-sort-bench-test/master/arraySortTest.js var buffer = [781197, … ]; var sparseArray = [781197, … ]; var sparseArray2 = [{'a' : 781197}, …]; var denseArray = [{'a' : 781197, 'b': ['r', 'a', 'n', 'd', 'o', 'm'] }, …]; /* buffer : for some reason, the […]

原生JavaScriptsorting执行比实施mergesort和quicksort慢

我已经实现了一个mergesort和一个quicksort来比较它们与原生JavaScriptsorting。 对于quicksort我试图使用这个algorithm: 在YouTube上查看algorithm 。 两种algorithm都使用尽可能less的内存,对于合并sorting,为每个recursion调用传递一个辅助数组(以避免开销),并为快速sorting开始和结束位置的位置。 我正在使用sorting来pipe理NodeJs应用程序中的大量数据。 下面你有mergesort,quicksort和本地JavaScriptsorting,你可以testing性能 问题是:为什么本机JavaScriptperformance较慢? 在我的情况下: Chrome – 合并sorting:测量:1997.920ms; 快速sorting:测量:1755.740ms; 原产地:措施:4988.105ms 节点:合并sorting:测量:2233.413ms; 快速sorting:测量:1876.055ms; 本机:测量:6317.118ms 合并sorting var length = 10000000; // ten millions; var arr = []; for (let i = length; i > 0; i–) { // random array arr.push(parseInt(Math.random() * 1000000000)); } var mergeSort = function(array) { function merge(arr, aux, lo, […]

mongoose,通过填充字段sorting查询

据我所知,可以用Mongoose( source )对填充的文档进行sorting。 我正在寻找一种方法来sorting一个或多个填充字段的查询。 考虑这两个mongoose模式: var Wizard = new Schema({ name : { type: String } , spells : { [{ type: Schema.ObjectId, ref: 'Spell' }] } }); var Spell = new Schema({ name : { type: String } , damages : { type: Number } }); 示例JSON: [{ name: 'Gandalf', spells: [{ name: 'Fireball', […]

带有下划线sortBy的对象sorting数组

我有这个数组。 如何使用下划线“_.sortBy”按照开始date对其进行sorting? [ { id: 'oljw832021kjnb389xzll323jk', start: { dateTime: '2013-09-26T13:30:00-07:00' }, end: { dateTime: '2013-09-26T14:30:00-07:00' }, }, { id: 'ed7l5tmckdp0lm90nvr4is3d4c', start: { dateTime: '2013-09-26T15:30:00-07:00' }, end: { dateTime: '2013-09-26T16:30:00-07:00' }, }, { id: 'etmasdsackdp0kjl0nvrkopioqw', start: { dateTime: '2013-09-26T18:00:00-07:00' }, end: { dateTime: '2013-09-26T19:00:00-07:00' }, } ]