gpt4 book ai didi

javascript - Mongoose 错误填充虚拟

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

我正在使用 node 和 mongo 开发一个项目。我在本地拥有它并在服务器上“实时”进行测试。该项目的本地副本完全没有问题,但实时版本崩溃并出现错误:

/root/farm_api/node_modules/mongoose/lib/model.js:3002 throw new Error('If you are populating a virtual, you must set the ' + ^

错误:如果你正在填充一个虚拟的,你必须设置 localField 和 foreignField 选项 在 getModelsMapForPopulate (/root/farm_api/node_modules/mongoose/lib/model.js:3002:13) 在填充(/root/farm_api/node_modules/mongoose/lib/model.js:2647:15) 在 _populate (/root/farm_api/node_modules/mongoose/lib/model.js:2615:5) 在 Function.Model.populate (/root/farm_api/node_modules/mongoose/lib/model.js:2575:5) 在立即。 (/root/farm_api/node_modules/mongoose/lib/query.js:1276:17) 在 Immediate._onImmediate (/root/farm_api/node_modules/mongoose/node_modules/mquery/lib/utils.js:137:16) 在 processImmediate [as _immediateCallback] (timers.js:383:17)

我不知道问题出在哪里,我认为这与我使用 aggregate$lookup 的 api 调用有关可以在这里看到:

api.dbm.Field.aggregate([
{
$lookup: {
from: 'tasks',
localField: '_id',
foreignField: 'field',
as: 'fieldTask'
}
},
{
$lookup: {
from: 'stocks',
localField: 'owner',
foreignField: 'owner',
as: 'stock'
}
}

], function(err, result){
if(err) console.log(err);
else {
var aggregatedData = result;
api.checkStaffRole(req.query.as, req.user._id, req.query.fid, res, function(fields, ids)
{
aggregatedData.forEach(function(record, index, object){
if(!api.lodash.find(fields, {'_id': record._id})){
object.splice(index, 1);
}
});
api.lodash.forEachRight(aggregatedData, function(record, index, object){
if(!api.lodash.find(record.staff, {'user': req.user._id})){
object.splice(index, 1);
}
});


res.json(api.buildResponse(null, aggregatedData));
});
}
});

我认为这是因为在调用 api 时它们在集合中没有记录,但为什么它在本地工作并且只有在服务器上时才会出现问题?两台服务器都安装了 mongo 3.2,在 npm 中我在两个副本上都使用了 mongoose 4.6.8(在本地使用 4.6.4 没有问题更新了包并检查仍然没有问题)。
更新:通过 npm 重新安装了 mongodb 和 mongoose 现在两个版本都有完全相同的包(由于我在 package.json 中使用了 ^ ) 而且我仍然无法在本地主机上复制错误。
更改服务器上的代码以打印出结果值并显示在控制台上,以便它聚合数据然后在执行后立即崩溃

最佳答案

再次回顾那里的所有代码并决定回滚更改,似乎我落后于 mongoose 4 个更新,并且在 4.6.7 版中他们添加了

fix(populate): throw more descriptive error when trying to populate a virtual that doesn't have proper options #4602

由于版本 4.6.4,我从来没有考虑过这个问题,因为它给了我想要的结果我怀疑我上面的函数现在在高于 4.6.4 的版本上已经过时了。这个答案的寓意是检查 package.json 确保如果这种情况或类似情况发生在你身上,你确保你没有在你的包之前使用“^”设置 npm,因为这将在有合适的更新版本可用时更新它。

关于javascript - Mongoose 错误填充虚拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40718045/

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