【问题标题】:find(...).populate is not a function in mongoosefind(...).populate 不是 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 的一部分(您可以参考这个问题的答案:stackoverflow.com/questions/20858299/…)。尝试删除 toArray() 看看是否有帮助。

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


【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-30
      • 1970-01-01
      • 2021-08-28
      • 1970-01-01
      • 2023-03-30
      • 2020-05-18
      • 2018-02-10
      相关资源
      最近更新 更多