簡體   English   中英

填充虛擬的Mongoose錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM