我正在寻找一种基于另一个集合的数据总和来更新字段的方法。
我尝试带上所有的饭菜,并使用 forEach 为每顿饭调用 Products 集合,测试它是否有效,但我有时间了。
meals.find().forEach(meal => {
var products = db.Products.find(
{ sku: { $in: meal.products } },
{ _id: 1, name: 1, sku: 1, nutritional_facts: 1 }
)
printjson(products)
})
我的目标是在下面执行类似这样的操作以获得所需的结果,但我得到“SyntaxError: invalid for/in left-hand side”。不能在 mongo 查询中使用 for in 吗?
db.Meals.find({}).forEach(meal => {
const nutri_facts = {};
db.Products.find({ sku: { $in: meal.products } },
{ _id: 1, name: 1, sku: 1, nutri_facts: 1 }).forEach(product => {
for (let nutriFact in product.nutri_facts) {
nutri_facts[nutriFact] =
parseFloat(nutri_facts[nutriFact]) +
parseFloat(product.nutri_facts[nutriFact]);
}
}
});
for (let nutriFact in nutri_facts) {
meal.nutri_facts[nutriFact] =
nutri_facts[nutriFact];
}
}
db.Meals.updateOne({ _id: meal._id }, meal)
});
在这种情况下,我也很难弄清楚如何使用聚合和查找,但没有成功。
有可能这样做吗?
示例 - 膳食文件
{
_id: ObjectId("..."),
products : ["P068","L021","L026"], //these SKUs are part of this meal
nutri_facts: {
total_fat: 5g,
calories: 100kcal
(...other properties)
}
}
对于每顿饭,我需要使用“sku”字段在“产品”系列中查找其产品。然后我将总结所有产品的营养成分以获得膳食营养成分。
示例产品文档
{
_id: ObjectId("..."),
sku: 'A010'
nutri_facts: {
total_fat: 2g,
calories: 40kcal
(...other properties)
}
}
我知道在这种情况下 mongo 可能不是最好的选择,但整个应用程序已经使用它构建了。