我正在使用猫鼬在NodeJS中制作API,并且我必须建立需要关联的模型:
const userSchema = new Schema({{...}
favs: [{
type: Schema.Types.ObjectId,
ref: 'Propuesta'
}]
}, {...}
})
和一个名为“ Propuesta”的对象,该对象具有自己的ID
我需要的是在控制器中,使用$ match运算符获取包含在数组'favs'中的Propuesta模型的所有ID,然后使用$ group获得重复次数最多的Partido(这是另一个型号,并且此功能可以正常运行)。
很显然,'favs'是一个动态增长的数组,因此对于我所看到的,我需要在$ match代码中使用运算符$ or,但是我不知道如何将语法编写为说“如果此ID等于favs [0],或favs [1]或favs [n]”
这是我现在的方法(我知道现在正在比较我的id是否等于整个字符串“ [id:{...},id:{...} ...]” >
export const partidoAfin = ({ user, querymen: { query, select, cursor } }, res, next) => {
Propuesta
.aggregate([
{
'$match': {
$or: {'_id': user.favs}
}
},
{'$group': {
'_id': '$partido',
'partidoCount': {'$sum': 1}
}},
{'$sort': {partidoCount: -1}}
])
.then(success(res))
.catch(next)
}
非常感谢您
答案 0 :(得分:0)
我通过以下操作对其进行了修复:
export const partidoAfin = ({ user, querymen: { query } }, res, next) => {
let arrayIds = []
arrayIds = user.favs
Propuesta
.aggregate([
{
'$match': {
'_id': {'$in': arrayIds}
}
},
{'$group': {
'_id': '$partido',
'partidoCount': {'$sum': 1}
}},
{'$sort': {partidoCount: -1}}
]).then((result) => ({
count: result.length,
rows: result
}))
.then(success(res))
.catch(next)
}