条件更新MongoDB - $ set和$ addToSet

时间:2015-05-25 16:45:47

标签: mongodb mongoose

考虑这个架构:

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,但不会使用新设备创建新用户名。

建议?

0 个答案:

没有答案