2017-01-26 6 views
1

mongoが生成した_id以外の別の値を参照することは可能ですか?mongo objectIDのみでドキュメントを参照していますか?

私は、ユーザーのドキュメント内の実際のチャンネル名を参照しようとしています

name: {type: String, required: true}, 
uid: [{ 
    type: String, 
    ref: 'user', 
    required: true 
}] 

ユーザーモデル

uid: {type: String, required: true}, 
channel_pub: {type: String}, 
channel_groups: [{type: String}], 
auth_key: {type: String}, 
channels: [{ 
    name: { 
     type: String, 
     ref: 'channel' 
    } 
}] 

チャネルモデル。

答えて

2

あなたはマングース4.5.0以降Populate Virtualsでこれを行うことができます。

ここ
var UserSchema = new mongoose.Schema({ 
    uid: { type: String, required: true } 
}, { 
    toJSON: { 
     virtuals: true 
    } 
}); 

var ChannelSchema = new mongoose.Schema({ 
    name: { type: String, required: true }, 
    uid: [{ 
     type: String, 
     ref: 'User', 
     required: true 
    }] 
}); 

UserSchema.virtual('channels.data', { 
    ref: 'Channel', 
    localField: 'channels.name', 
    foreignField: 'name' 
}); 

ローカルフィールドがchannels.nameで、Channelオブジェクトがchannels.dataに移入されます。例えば

人口channels.dataを見つける:

User.find({}).populate('channels.data').exec(function(error, res) { 
    console.log(JSON.stringify(res, null, 4)); 
}); 

が得られます:

[{ 
    "_id": "588a82ff7fe89686fd2210b0", 
    "uid": "user1", 
    "channels": [{ 
     "data": { 
      "_id": "588a80fd7fe89686fd2210a8", 
      "name": "channel1", 
      "uid": [] 
     }, 
     "name": "channel1" 
    }, { 
     "data": { 
      "_id": "588a80fd7fe89686fd2210a9", 
      "name": "channel2", 
      "uid": [] 
     }, 
     "name": "channel2" 
    }], 
    "id": "588a82ff7fe89686fd2210b0" 
} 
... 
] 
+0

を私は感謝、探していたまさにつまり! – pwborodich

+0

私が 'channels.data'以外のものを指定すると、データは正しく提供されますが、別の属性として提供されます。例えば、私がそれをちょうど「詳細」にしていたら、チャンネルのcolletionからすべてのチャンネルの配列を作るでしょう。しかし、あなたの選択が好きなので好きな結果になったら、何も返されません。 – pwborodich

+0

申し訳ありませんが、私はかなり理解していません。あなたの入力フィールドをchannel.dataから詳細に変更したいですか?そうでない場合は、新しいモデルは何ですか? –

関連する問題