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 中的函数的主要内容,如果未能解决你的问题,请参考以下文章
TypeError: populate(...).exec 不是一个函数
Model.populate() 不是 Mongoose 中的返回文档