Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js MongoDB/Mongoose-总计表生成-性能方面哪个更好_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js MongoDB/Mongoose-总计表生成-性能方面哪个更好

Node.js MongoDB/Mongoose-总计表生成-性能方面哪个更好,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,作为NoSQL范式中相对较新的一种,我一直在讨论两种更高效、更高效的方法,特别是在规模方面 因此,本质上我希望生成一个汇总表,例如: Schema1 = { field1: String, specialVal: String } TotalTable = { specialValName: String, count: Number } 我想做的是跟踪SpecialVal可以获取的每个“值”,并统计Schema1中或其他文档中存在的文档数量 我想到了两种方法,一种是保持上面的模式结构,并使

作为NoSQL范式中相对较新的一种,我一直在讨论两种更高效、更高效的方法,特别是在规模方面

因此,本质上我希望生成一个汇总表,例如:

Schema1 = {
field1: String,
specialVal: String
}

TotalTable = {
specialValName: String,
count: Number
}
我想做的是跟踪SpecialVal可以获取的每个“值”,并统计Schema1中或其他文档中存在的文档数量

我想到了两种方法,一种是保持上面的模式结构,并使用MapReduce程序运行和更新统计数据

第二,我使用Mongoose作为ORM层,我可以使用Ref-ID引用另一个描述所有“SpecialVal”的模式,对于Schema1的每个插入,我可以从“SpecialValSchema”检索a文档并增加计数。例如:

Schema1 = {
field1 = String,
SpecialVal = {
 type: Schema.ObjectId,
 ref: 'SpecialVals'
}

SpecialVals = {
 name: String,
 count: 0
}
因此,我正在进行辩论,并希望获得StackOverflow中人们对此的看法。一个至少需要两个查询的insert,一个用于insert,一个用于检索SpecialVal文档并增加数据量,是否会比一个统计这一点的MapReduce程序更有效

嵌入所有内容是很好的,因为您可以立即预先获得这些值。从某种意义上说,使用对ObjectId的引用是整洁的,所有统计信息都会立即更新,但是在每次模式文档检索时填充和检索文档会有开销,而在插入时会有开销


我知道这可能是一些次要的问题,但我相信可能有人也讨论过同样的问题,对吧?

我觉得你想对文档进行地图缩小。我对Mongo不是很熟悉,但您应该能够从Mongo中的索引中获得所需的内容,而不是试图将数据存储在文档中。请考虑:并且:您可能还希望研究Mongo聚合管道,在某些情况下,它应该比mapreduce具有更好的性能:是其中一种的聚合管道吗操作?我希望它能够随着时间的推移而持续和更新,而不是在每次需要时都进行计算。看起来有点像一个MapReduce程序或是建立在它之上的。