我正在通过尝试构建CRUD API来学习Node,Mongoose和Express。当试图 “加入” 两个MongoDB的集合与.populate功能,我得到一个错误,如何在Express路径中使用.findOne。
db.collection(...)。findOne(...)。填充不是一个函数
我的JavaScript脚本不是很好,所以我尝试以不同的方式重写这个方法无济于事。
server.js
require('./models/User')
require('./models/Product')
var db
mongodb.MongoClient.connect('mongodb://<username>:</password>@xxxx.mlab.com:xxx/xxx', (err, database) => {
if (err) return console.log(err)
db = database
app.listen(3000, function() {
console.log("listening on port 3000");
})
})
app.get('/api/users/:id', (req, res) => {
db.collection(USERS_COLLECTION).findOne({ id: (req.params.id) }).populate('product'), (err, doc) => {
if (err) handleError(res, err.message, 'Failed to get user')
res.status(200).json(doc)
console.log(req.params)
}
})
型号/ user.js的
var mongoose = require('mongoose')
var UserSchema = new mongoose.Schema({
id: String,
first_name: String,
last_name: String
id: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Product'
}
})
mongoose.model('User', UserSchema)
哪个节点模块'db'? – Sangharsh
如果你正在使用Mongoose,那么你可以使用模式方法,所以你应该能够在模型对象上使用'.populate' –
@Sangharsh我已经添加了如何将db设置为代码顶部 –