猫鼬-地图值计数

时间:2019-07-30 21:46:24

标签: node.js database mongodb mongoose

让我们说这个模型有2个键:_idreactions

reactions: {
    type: Map,
    of: Number,
    default: {}
}

所以reactions具有一些值,如:

reactions: {
    userid1: 1
    userid2: 2
    ...
}

我有2个该模型的文档:

model1doc1: {
    _id: 1,
    reactions: {
        u1: 1,
        u2: 1,
        u3: 0,
        u4: -1
    }
},
model1doc2: {
    _id: 2,
    reactions: {
        u1: 1,
        u2: 0,
        u3: 0,
        u4: -1
    }
}

现在有了第二个模型,该模型具有该模型的参考字段和_id(2个字段)。

post: {
    type: mongoose.Types.ObjectId,
    ref: 'model1'
}

此模型也有2个文档:

model2doc1: {
    _id: 1,
    post: ObjectId("1")
},
model2doc2: {
    _id: 2,
    post: ObjectId("2")
}

我的目标是运行一个聚合查询,该查询返回以下对象:

model2doc1: {
    _id: 1,
    post: {
        _id: 1,
        reactions: {
            "1": 2,
            "0": 1,
            "-1": 1
        }
    }
},
model2doc2: {
    _id: 2,
    post: {
        _id: 2,
        reactions: {
            "1": 1,
            "0": 2,
            "-1": 1
        }
    },
}

已填充post参考字段,但帖子的反应字段现在是一个对象,该对象将反应值(1、0,-1)作为键,而反对值是这些反应的计数(否。 1s,0s ..)

可以使用mongo的$lookup聚合命令来填充post字段,但是我不确定如何使用$sum来获得那些结果。

最好的方法是什么?

0 个答案:

没有答案