在findOneAndUpdate上检查该参数是否存在于数组中

时间:2016-08-31 20:25:25

标签: javascript node.js mongodb mongoose

我有模特:

var UserSchema  = new Schema({
    name : {type: String, required: true},
    devices : [
        { uuid : {type: String, required: true},
        token : {type: String, required: true}
    ]
})

当用户从另一个(新)设备连接时,我想将新设备推送到设备阵列,否则,当用户更新令牌时,我需要更新现有的数组项。

那么,我在做什么:

    User.findOneAndUpdate({name: 'John'}, { 
        $push: {devices : { uuid : '12345', token : 'TEST_TOKEN'}}
        }, {safe: true, new : true}, function(err, user) {
            console.log(err);
            console.log(user);          
    });

我认为我需要以某种方式检查数据中是否存在设备UUID,如果存在更新令牌,否则创建新设备项并推送到数组

我已经尝试使用unique:true

创建uuid索引
{ uuid : {type: String, required: true, index : {unique: true}}

但是这个索引设置为所有集合。如果我有另一个具有相同UUID的用户,我就无法添加新的。

我怎样才能做我想做的事?

1 个答案:

答案 0 :(得分:0)

解决方案是here,问题在于我不知道如何使用findOneAndUpdate函数更新模型中的数组。