我正在通過嘗試構建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設置爲代碼頂部 –