如何解决 mongodb 上特定集合的重复问题

How to solve repetition on a particular set on mongodb

这里这个语气是我附上的问题集的图片形式。现在我要解决的是:

This One is My Problem Set. In this Picture, There are 5 Columns. Out of this 1 to 4th column have some alphabets. Every Alphabets Have its own Weighted Value. So By checking the repetition of alphabets with the weighted value we have to store it in a sorted order on 5th Table i.e Final Value. So what's the procedure for doing this task on node-js / MongoDB?

实际上,此数据在 MongoDB 上,看起来像这样:

{
    "_id" : ObjectId("5a337aab17030d133c11fa2f"),
    "sequenceid" : 1,
    "column1" : [//This column has weighted value 2 
        {"comodity": "a"},
        {"comodity": "d"},
        {"comodity": "c"},
        {"comodity": "b"},
   ],

    "column2" : [//This column has weighted value 2.5 
        {"comodity": "d"},
        {"comodity": "a"},
        {"comodity": "e"},
        {"comodity": "f"},
   ],

    "column3" : [//This column has weighted value 2.5
        {"comodity": "a"},
        {"comodity": "g"},
        {"comodity": "k"},
        {"comodity": "c"},
   ],
    "column4" : [//This column has weighted value 3
        {"comodity": "i"},
        {"comodity": "d"},
        {"comodity": "h"},
        {"comodity": "j"},
   ]
    "__v" : 0
}

我想要的是像这样的东西,即

d  // d = 7.5 (as d appear in column 1, column 2 and column 4. so Sum its weighted value we get 7.5).
a  //a = 7 (same usecase)
c  // c = 4.5 (same usecase)
i  // i = 3 (same usecase)
h  // h = 3 (same usecase)
j  //j = 3 (same usecase)
e  //e = 2.5 (same usecase)
f  // f = 2.5 (same usecase)
g  // g = 2.5 (same usecase)
k  // k = 2.5 (same usecase)
b // b = 2 (same usecase)

感谢任何帮助

就您必须处理所有数据而言,我会通过对数据库的一次请求来提取旧信息

collection.find({}, ...);

然后您可以遍历每一列的值。在一个对象中,我会检查字母表是否已经在对象中,如果它是将列的值添加到它的值,如果不是,则将新字母表添加到对象

var result = {
    "sequenceid" : 1,
    "column1" : [//This column has weighted value 2 
        {"comodity": "a"},
        {"comodity": "d"},
        {"comodity": "c"},
        {"comodity": "b"},
   ],

    "column2" : [//This column has weighted value 2.5 
        {"comodity": "d"},
        {"comodity": "a"},
        {"comodity": "e"},
        {"comodity": "f"},
   ],

    "column3" : [//This column has weighted value 2.5
        {"comodity": "a"},
        {"comodity": "g"},
        {"comodity": "k"},
        {"comodity": "c"},
   ],
    "column4" : [//This column has weighted value 3
        {"comodity": "i"},
        {"comodity": "d"},
        {"comodity": "h"},
        {"comodity": "j"},
   ]
};

var columns = [
    {name: "column1", value: 2}, 
    {name: "column2", value: 2.5}, 
    {name: "column3", value: 2.5}, 
    {name: "column4", value: 3}, 
];

var total = {};

for(let column of columns) {
    for(let comodity of result[column.name]) {
        var alphabet = comodity.comodity;
        if(total[alphabet]) {
            total[alphabet] += column.value;
        } else {
            total[alphabet] = column.value;
        }
    }
}


console.log(total);

这会得到您正在寻找的结果:

{一个:7, d:7.5, c:4.5, 乙:2, e:2.5, f: 2.5, 克:2.5, k:2.5, 我:3, 小时:3, j: 3}