2017-01-26 1 views
1

Можно ли ссылаться на другое значение, отличное от генерируемого mongo _id?ссылки на документы только с помощью объекта mongoIDID?

пользователя Модель

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

канала Модель

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

Я пытаюсь сослаться на фактическое имя канала в документе пользователя.

ответ

2

Вы можете сделать это с Populate Virtuals так мангуст 4.5.0:

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', он предоставляет мне данные правильно, но это как отдельный атрибут. Например, если бы я сделал это только «детали», он сделал бы массив всех каналов из коллабораций каналов. но когда у меня это похоже на ваш выбор, потому что это желаемые результаты, я ничего не получаю. – pwborodich

+0

Простите, я не совсем понимаю, вы хотите изменить свое поле заполнения из channel.data на детали? Если нет, какова будет новая модель? –