我正在尝试构建一个CRUD API来学习Node,Mongoose和Express。当试图"加入"两个带有.populate函数的MongoDB集合,我收到错误
db.collection(...)。findOne(...)。populate不是函数
我的javascript chops不是很好,所以我尝试用不同的方式重写它无济于事。
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)
答案 0 :(得分:0)
收藏品没有mongoose的模型API,包括.populate
。您应该使用在mongoose中注册的模型,而不是直接使用集合。
var schema = new mongoose.Schema(...);
var User = mongoose.model('User', schema);
// you can also get the model after it was registered via mongoose.model('User')
app.get('/api/users/:id', (req, res) => {
User.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)
}
})
&#13;