在findOneAndUpdate中检查数组中存在参数的项

On findOneAndUpdate check that item with parameter existing in array

本文关键字:参数 存在 数组 findOneAndUpdate 检查      更新时间:2023-09-26

我有模型:

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,我不能添加新的。

我怎样才能做我想做的?

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