我有一个普通的JavaScript对象,不存在则增加,存在则更新,代码如下,

const AV = require('../libs/av-weapp-min.js')

class Item extends AV.Object {

  static createOrUpdate(item) {
    item.save().then((item) => {
    }).catch(console.error)
  }
  static fromPlainObject(obj) {
    const item = new Item()
    for (var key in obj) {
        //copy all the fields
        if (key === 'createdAt' || key === 'updatedAt') continue
        if (key === 'objectId') {
          item.set('id', obj[key])
        } else {
          item.set(key, obj[key])
        }
    }
    return item
  }
}

AV.Object.register(Item, 'Item');
module.exports = Item;

给定一个 plain object, 调用如下代码更新或创建:

const item = Item.fromPlainObject(obj)
Item.createOrUpdate(item)

这段代码总是抛出错误:

A unique field was given a value that is already taken.

我猜测应该是 id 在数据库中已经存在了,既然存在,就应该更新这条数据,为什么无法更新呢?

if (obj.objectId) {
  item = AV.Object.createWithoutData('Item', obj.objectId)
} else {
  item = new Item();
}
// for ( in ) ...
// ...

谢谢,试了一下,这个方法好用!