[英]Mongoose error populating virtual
我正在使用node和mongo開發一個項目。 我在本地使用它並在服務器上“直播”進行測試。 該項目的本地副本完全沒有問題,但實時版本崩潰並出現錯誤:
/root/farm_api/node_modules/mongoose/lib/model.js:3002拋出新錯誤('如果要填充虛擬,則必須設置'+ ^
錯誤:如果要填充虛擬,則必須在populate(/ root / farm_api / node_modules / mongoose)的getModelsMapForPopulate(/root/farm_api/node_modules/mongoose/lib/model.js:3002:13)中設置localField和foreignField選項。 /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)atInd._onImmediate(/root/farm_api/node_modules/mongoose/node_modules/mquery/lib/utils.js:137:16)at processImmediate [as _immediateCallback](timers.js:383:17)
我不知道問題是什么我認為它與這個api調用有關,我使用aggregate
和$lookup
可以在這里看到:
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):在嘗試填充沒有正確選項的虛擬時拋出更多描述性錯誤#4602
由於版本4.6.4,我從來沒有照顧過這個,因為它給了我想要的結果我懷疑上面的函數現在已經過時了4.6.4以上的版本。 這個答案的道德是檢查package.json確保如果這個或類似的事情發生在你身上,你確保你沒有在你的包之前使用“^”設置npm,因為這將在適當的更新版本可用時更新它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.