架构:
var NetworkSchema = new Schema({
UserID: {
type: Schema.Types.ObjectId,
ref: 'User'
NetworkList: [ ],
});
到目前为止,我一直在想的是在 NetworkList 数组中插入不同的专业字段名称的对象,如heartSpecialist,Cardiologists等,它应该是通用的所以,我离开了NetworkList数组 - 空,可能我对这个逻辑不太正确,这里是文档
{
"NetworkList" : [
HeartSpecialist: [ //ObjectId's of HeartSpecialist ],
CardioLogists: [//ObjectId's of CardioLogists ]
..
],
"UserID" : ObjectId("54aa46ef65c266341494a528"),
"_id" : ObjectId("54aa46ef65c266341494a529")
}
当我使用鉴别器作为模式类型时:
var portalSchema = new Schema(),
CircleType = new Schema({
ID: {
type: Schema.Types.ObjectId,
ref: 'User'
}
});
CIRCLE = Portal.discriminator('CIRCLE', CircleType);
function logger(label,content) {
console.log(
'%s:\n%s\n', label,
util.inspect( content, false, 8, false ) );
}
async.waterfall([
function(callback){
var circleObj = new CIRCLE({'ID': req.body.Fid});
circleObj.save(function(err,circleObj) {
logger('Circles', circleObj);
callback(err,circleObj);
});
},
function(circleObj,callback){
var get = {'UserID':req.body.UserID};
var up = {$push:{'NetworkList':circleObj}};
Network.update(get,up,{upsert:true},function(err,user){
if (err) {
console.log(err);
return err;}});
]);
结果文件:
{
"NetworkList" : [
{
"__v" : 0,
"ID" : ObjectId("54a6de049754e5940c97435a"),
"__t" : "CIRCLE",
"_id" : ObjectId("54aa48ccba36d7ac1810e832")
},
],
"UserID" : ObjectId("54aa46ef65c266341494a528"),
"_id" : ObjectId("54aa46ef65c266341494a529")
}
我知道这个逻辑完全不同于我上面描述或我想要的东西,到目前为止我已经来到这里,我可以区分类型医生' __ t' 在上面的文档中,可能是我不是在寻找代码而是在实现循环类型功能的逻辑。 谢谢
修改 问题: - 当添加相同圆圈类型的医生时,相同圆圈类型的新对象将存储在数据库中,从而导致冗余
{
"NetworkList" : [
{
"__v" : 0,
"ID" : ObjectId("54aa46ef65c266341494a528"),
"__t" : "CIRCLE", //two different objects of same circle
"_id" : ObjectId("54aa4a40bf50c41c14e389c4")
},
"54aa46ef65c266341494a528",
{
"__v" : 0,
"ID" : ObjectId("54a6de049754e5940c97435a"),
"__t" : "CIRCLE",
"_id" : ObjectId("54aa4add024eebd81fe009a2")
},
],
"UserID" : ObjectId("54a8291f8ed9a2b41eb164ff"),
"__v" : 0,
"_id" : ObjectId("54a8291f8ed9a2b41eb16500")
}