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

时间:2016-07-19 21:48:55

标签: node.js mongodb mongoose populate mongoose-populate

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

我有搜索,在文档中看来它和我一样。

这里的模型:

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);

然后是我使用的发现:

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

2 个答案:

答案 0 :(得分:3)

我找到了解决方案,非常简单。看来昨天我真的很亲密。

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

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

现在我调用doodleCollection.find(...)而不是doodleModel.find(...),而填充工作正在完善!

答案 1 :(得分:0)

我正在使用以下方法,将空值作为数据:-

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

然后我将其更改如下,并填充了方法:-

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

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

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