考虑这个架构:
UUID 是每个设备唯一且一次创建的。
CNUID 也是一个唯一的号码,但请将其视为令牌,这意味着它会不时更新。
username: {type: String, unique: true, required: true},
devices: [
{
ip:{type:String},
meta:{type:String},
type: {type: String, default: 'none', enum: ['android', 'ios', 'web', 'none']},
cnuid: {type: String},
uuid:{type:String, unique:true}
}
]
我正在尝试这样做:
如果用户名不存在,请创建用户名并将其设备附加到此阵列
如果存在,请尝试将此设备附加到阵列,只要没有这样的uuid,
如果有这样的uuid,请用提供的cnuid覆盖cnuid。
所以基本上我已经尝试了几个选项,在一个查询中只有2个中有3个。
如果可能,我试图避免对此进行多次查询。
我坚持的问题是:
db.devices.update(
{username:user.username, 'devices.uuid':device.uuid},
{$set:{username:username, 'devices.$.cnuid':cnuid}},{upsert:true})
如果用户存在,这将创建一个新设备。 它将更新现有uuid上的cnuid,但不会使用新设备创建新用户名。
建议?