如何在Express路线中使用.populate和.findOne?

时间:2017-02-20 19:21:08

标签: javascript node.js mongodb express

我正在尝试构建一个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)

1 个答案:

答案 0 :(得分:0)

收藏品没有mongoose的模型API,包括.populate。您应该使用在mongoose中注册的模型,而不是直接使用集合。

&#13;
&#13;
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;
&#13;
&#13;