find(...).populate 不是 mongoose 中的函数

Posted

技术标签:

【中文标题】find(...).populate 不是 mongoose 中的函数【英文标题】:find(...).populate is not a function in mongoose 【发布时间】:2016-11-22 23:19:32 【问题描述】:

我正在尝试在 mongoose 和 node 中填充两个表,但收到 populate 不是函数的错误。

我有搜索,在文档中似乎和我一样。

这里是模型:

var mongoose = require('mongoose');
var dodleSchema = new mongoose.Schema(
    name: String,
    productorId: type: mongoose.Schema.ObjectId, ref: "Productor",
    description: String,
    ambassadorId: type: mongoose.Schema.ObjectId, ref: "Ambassador",
    accepted:  type: Boolean, default: false ,
    read:  type: Boolean, default: false ,
    deliveryAddress: 
        lat: String,
        lng: String
    ,
    createdAt: Date,
    products: [
        
            primaryImage: String,
            images: [],
            name: String,
            max: Number,
            min: Number,
            step: Number,
            stock: Number,
            normalPrice: Number,
            doodlePrice: Number,
            freeShipping: Boolean,
            freeShippingFrom: Number
        
    ],
    endsAt: Date,
    packagingType: String,
    orders: [
        
            name: String,
            email: String,
            purchases: [
                
                    productId: String,
                    quantity: Number
                
            ]
        
    ]
);
module.exports = mongoose.model('Doodle', dodleSchema);

然后是我使用的 find:

router.route('/requests/:id')
.get(function (req, res) 
    doodleCollection
        .find(
            ambassadorId: new mongodb.ObjectID(req.params.id),
            read: false
        )
        .populate('productorId')
        .toArray(function (error, results) 
            if (error) 
                res.json('error': "Ha habido un error en la extracción de requests");
                return false;
            

            var alertNew = false;

            for (var i = 0; i < results.length; i++) 
                if (results[i].read == false) 
                    readed = true;
                    break;
                
            

            res.json(
                requests: results,
                alertNew: alertNew
            );
    );
);

这是我得到的错误:

Error

【问题讨论】:

您可以尝试将有关大使 id 的行更改为 ambassadorId: mongoose.Types.ObjectId(req.params.id) 另外,toArray 不是 Mongoose 的一部分(您可以参考这个问题的答案:***.com/questions/20858299/…)。尝试删除 toArray() 看看是否有帮助。 【参考方案1】:

我找到了解决方案,而且非常简单。看来我昨天真的很接近了。

我在集合 doodleCollection 中执行填充方法,我需要在模型中执行此操作。

更改使查找完全有效的对象。

现在我调用 doodleModel.find(...) 而不是 doodleCollection.find(...) 并且填充工作完美!

【讨论】:

【参考方案2】:

我正在使用以下内容,这给了我 null 作为数据:-

let PostModel = mongoose.model('Post');

然后我将其更改为以下并且填充方法有效:-

let PostModel = require("../model/post.js"); //path to your post model

确保从 post.js 模型文件中导出模型,如下所示:-

module.exports = mongoose.model('Post', PostSchema);

【讨论】:

以上是关于find(...).populate 不是 mongoose 中的函数的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose Populate - 效率

TypeError: populate(...).exec 不是一个函数

Model.populate() 是不是返回一个承诺?

Model.populate() 不是 Mongoose 中的返回文档

ModeMongoose 的 Async/Await 与 Mongoose Deep Populate Chain

Populate() 不是可重入的 Django Google App Engine