我正在尝试更新具有嵌套文档的MongoDB集合中的字段。我必须增加一定的价值。更新查询工作正常,但是我需要将其嵌套在另一个获取当前值的查询中,以便增加它。
当我使用错误的find()
方法时,嵌套工作得很好。我意识到必须使用aggregate()
。我无法正常工作,由于某种原因,该方法返回未定义。我已经在Shell中尝试了相同的聚合查询,并且该查询可以正常工作,因此它必须与Node.js一起做一些事情
失败的功能:
static addPointsToUser(mainId, userId, pointsToAdd) {
const db = getDb();
function getCurrent() {
db.collection('mycoll')
.aggregate([
{ $match: { _id: mainId } },
{ $unwind: '$userPoints' },
{ $match: { 'userPoints._id:': userId } },
{ $group: { _id: 'userPoints._id', userPoints: { $push: '$userPoints.points' } } }
])
}
function updateNew(newPoints) {
db.collection('mycoll')
.updateOne(
{ _id: mainId },
{ $set: { "userPoints.$[elem].points": newPoints } },
{
multi: true,
arrayFilters: [{ "elem._id": userId }]
}
)
}
return getCurrent()
.then(result => {
console.log(result);
const newPoints = result.userPoints[0];
return updateNew(newPoints)
.then(result => {
console.log(result);
return result;
})
})
}
文档如下:
{
"_id": ObjectId("5d4048f56a895612acabe0a9"),
// Some other fields
"userPoints": [
{ "_id": "manualID1", "points": 80 },
{ "_id": "manualID2", "points": 90 }
]
}
预期的合计结果:
{ "_id" : "manualID1", "userPoints" : [ 90 ] }
Mongo shell提供了上面看到的结果。
实际结果: TypeError:无法读取未定义的属性“ then”
如果我记录汇总结果,它将打印并清空数组([])。
答案 0 :(得分:5)
您的方法getCurrent
和updateNew
未返回任何内容。这表示您在错误消息所说明的未定义上使用.then()
。
在return
之前添加db.collection('mycoll')
语句应该可以帮助您。