2016-12-16 8 views
0

私はNodeJS & MongoDBを使い慣れていないかもしれません。この質問はすでに質問されているかもしれませんが、単純な答えではありません。私はそのように見ているスキーマに取り組んでいますMongoDB + NodeJS外部キー全体のドキュメント

var usersSchema    = new mongoose.Schema({ 
    profile   : { 
     email    : {type: String, default: ''}, 
     password   : {type: String, default: ''}, 
     firstName   : {type: String, default: ''}, 
    }, 
    friends   : [{ 
     type    : mongoose.Schema.Types.ObjectId, 
     ref     : 'usersSchema' 
    }], 
    pets   : [{ 
     type    : mongoose.Schema.Types.ObjectId, 
     ref     : 'petsSchema' 
    }], 
}); 

1)自体に参照のうえスキーマを作ることが可能ということです(ここでは利用者)は、ユーザー誰であるか、友人のリストを参照してください?私はそれに対して何の答えも見つけられなかったが、確かに良い。

2)実際には、ペットのObjectIDのリストを取得していますが、名前や家系図などの他の属性はありません。リクエストからペットドキュメント全体を読み込むことは可能ですか?

User.findOne({ 'profile.email' : req.user.profile.email }).populate('Pets').exec(function(err, user){ .... 

==>これはペットのオブジェクトIDだけを返しています。

ご返信ありがとうございます! すてきな一日を!

答えて

0

問題は、refでスキーマ名を指定していることです。そこにモデル名を指定する必要があります。

var mongoose = require('mongoose') 
, Schema = mongoose.Schema 

var personSchema = Schema({ 
    _id  : Number, 
    name : String, 
    age  : Number, 
    stories : [{ type: Schema.Types.ObjectId, ref: 'Story' }] 
}); 

var storySchema = Schema({ 
    _creator : { type: Number, ref: 'Person' }, 
    title : String, 
    fans  : [{ type: Number, ref: 'Person' }] 
}); 

var Story = mongoose.model('Story', storySchema); 
var Person = mongoose.model('Person', personSchema); 

マングースサイト上の例で示すと、あなたのスキーマを取るならば、それはコードの下のようになりますと

var petSchema = new mongoose.Schema({ 
 
\t firstName: { 
 
\t \t type: String, 
 
\t \t default: '' 
 
\t }, 
 
\t pedigree: { 
 
\t \t type: String, 
 
\t \t default: '' 
 
\t } 
 
}); 
 

 

 
var usersSchema = new mongoose.Schema({ 
 
\t profile: { 
 
\t \t email: { 
 
\t \t \t type: String, 
 
\t \t \t default: '' 
 
\t \t }, 
 
\t \t password: { 
 
\t \t \t type: String, 
 
\t \t \t default: '' 
 
\t \t }, 
 
\t \t firstName: { 
 
\t \t \t type: String, 
 
\t \t \t default: '' 
 
\t \t }, 
 
\t }, 
 

 
\t friends: [{ 
 
\t \t type: mongoose.Schema.Types.ObjectId, 
 
\t \t ref: 'User' 
 
\t }], 
 

 
\t pets: [{ 
 
\t \t type: mongoose.Schema.Types.ObjectId, 
 
\t \t ref: 'Pet' 
 
\t }] 
 
}); 
 

 

 
// we need to create a model to use it 
 
var User = mongoose.model('User', UserSchema); 
 
var Pet = mongoose.model('Pet', petSchema);

+0

こんにちは、私はそれに応じてスキーマを変更し、答えてくれてありがとう。しかし、それは動作していないようです。私は常にオブジェクトのIDではなく、オブジェクトの内容を取得しています。だから私はオブジェクトIDキーで選択するだけでなく、ペットテーブルのオブジェクトを選択する必要があるように見えます。 –