gpt4 book ai didi

node.js - 用 Mongoose 填充后如何聚合

转载 作者:可可西里 更新时间:2023-11-01 09:29:07 24 4
gpt4 key购买 nike

我正在使用 Mongoose ,但在填充后进行聚合时遇到问题。下面是一个例子。

有两种 Mongoose 模型模式,怪物和集合。

const monster = new Schema({
name: { type: String },
power: { type: Number },
armor: { type: Number },
});

const collection = new Schema({
_monster: { type: Schema.Types.ObjectId, ref: 'Monster' },
addedPower: { type: Number },
addedArmor: { type: Number },
});

如您所见,字段“_monster”是模式“collection”到模式“monster”的外键。

我想使用如下路径填充“monster”和“collection”。

Collection.find().populate('_monster')

我想像下面这样汇总这个结果。

AboveResult.aggregate([
{
'$project': {
'new_field': {
'$add': [
'$addedPower', '$addedArmor', '$_monster.power', '$_monster.armor'
]
}
}
}
]);

以上不起作用,但我认为它可以解释我想要什么。回答将不胜感激。

最佳答案

您可以使用 $lookup 作为填充的替代方法,这是在服务器上完成的:

Collection.aggregate([
{
"$lookup": {
"from": "monsters",
"localField": "_monster",
"foreignField": "_id",
"as": "monster"
}
},
{ "$unwind": "$monster" },
{
"$project": {
"name": "$monster.name",
"power": "$monster.power",
"armor": "$monster.armor",
"addedPower": 1,
"addedArmor": 1,
'new_field': {
'$add': [
'$addedPower',
'$addedArmor',
'$monster.power',
'$monster.armor'
]
}
}
}
]).exec(callback);

关于node.js - 用 Mongoose 填充后如何聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39514079/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com