让我们说这个模型有2个键:_id
和reactions
。
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
来获得那些结果。
最好的方法是什么?