Javascript 如何在快速路线中使用.findOne填充.findOne?
我正在学习Node、Mongoose和Express,尝试构建一个crudapi。当尝试使用.populate函数“连接”两个MongoDB集合时,我得到一个错误 db.collection(…).findOne(…).populate不是函数 我的javascript不是很好,所以我试着用不同的方法重写它,但没有用 server.jsJavascript 如何在快速路线中使用.findOne填充.findOne?,javascript,node.js,mongodb,express,Javascript,Node.js,Mongodb,Express,我正在学习Node、Mongoose和Express,尝试构建一个crudapi。当尝试使用.populate函数“连接”两个MongoDB集合时,我得到一个错误 db.collection(…).findOne(…).populate不是函数 我的javascript不是很好,所以我试着用不同的方法重写它,但没有用 server.js require('./models/User') require('./models/Product') var db mongodb.MongoClie
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)
}
})
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)
集合没有mongoose的模型API,包括
.populate
。您应该使用在mongoose中注册的模型,而不是直接使用集合
var schema=newmongoose.schema(…);
var User=mongoose.model('User',schema);
//您还可以在通过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,“无法获取用户”)
res.status(200).json(doc)
控制台日志(请求参数)
}
})
哪个节点模块是db
?如果您使用的是Mongoose,那么您可以使用模式方法,因此您应该能够在模型上使用。填充object@Sangharsh我已经添加了如何将db设置到代码顶部。很好,我将尝试一下。我的初始错误是“用户未定义”,因此我假设我的模式设置不正确。我现在来调查一下。谢谢我认为您之所以会出现此错误,只是因为您没有在这个确切的文件中定义变量。使用var User=mongoose.model('User')
(或您注册架构时使用的任何名称)。我在最初的帖子中添加了我认为相关的其他片段。非常感谢您的帮助只要在var db
之后添加var User=mongoose.model('User')
就可以了。我不再收到错误,但我没有得到我期望的结果。这是个好问题。在正确的轨道上…谢谢你的帮助!