2017-02-20 3 views
0

私は、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) 
+0

? – Sangharsh

+0

Mongooseを使用している場合は、スキーマメソッドを使用することができますので、モデルオブジェクトに '.populate'を使用できるようにしてください。 –

+0

@Sangharshコードの先頭にdbを設定する方法を追加しました。 –

答えて

0

コレクションは.populate含むマングースのモデルAPIを持っていません。コレクションを直接使用する代わりに、あなたはmongooseで登録したモデルを使用する必要があります。ノードモジュールは `db`ある

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) 
 
} 
 
})

+0

、私はこれを試してみます。私の最初のエラーは "ユーザーが定義されていない"ので、私は自分のスキーマが正しく設定されていないと仮定します。私は今それを見るでしょう。ありがとう! –

+0

この正確なファイルに変数を定義していないため、このエラーが発生していると思います。 'var User = mongoose.model( 'User')'(またはあなたがスキーマを登録した名前)を使用してください。 –

+0

私は最初の投稿に関連する他のスニペットと思っているものを追加しました。私はあなたの助けに感謝します –

関連する問題