私は、Node、Mongoose、Expressを学習する過程で、CRUD APIを構築しようとしています。 .populate機能を持つ2つのMongoDBのコレクションを "参加" しようとすると、私はエクスプレスルートで.pindulateと.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)
? – Sangharsh
Mongooseを使用している場合は、スキーマメソッドを使用することができますので、モデルオブジェクトに '.populate'を使用できるようにしてください。 –
@Sangharshコードの先頭にdbを設定する方法を追加しました。 –