Sembast中的put和add有什么区别?

时间:2020-06-26 08:14:48

标签: database flutter nosql

使用称为Sembast的Flutter软件包。

这两个命令之间的区别是什么?

store.record(key).put(db, dataMap)

store.record(key).add(db, dataMap)

特别是关于存在现有数据时的行为。
他们会覆盖吗?
“ merge”参数如何在put方法中起作用?

还有其他区别,如果您还有其他指针。

谢谢。

1 个答案:

答案 0 :(得分:2)

每个sembast文档

  /// Create the record if it does not exist.
  ///
  /// Returns the key if inserted, null otherwise.
  Future<K> add(DatabaseClient databaseClient, V value) async
  /// Save a record, create if needed.
  ///
  /// if [merge] is true and the field exists, data is merged
  ///
  /// Returns the updated value.
  Future<V> put(DatabaseClient databaseClient, V value, {bool merge}) async

因此,基本上添加不会覆盖记录,而放置会

编辑:

  1. 是的,
    if (merge == true) {
      record = txnGetRecordSync(txn, key);
      //if (record != null) {
      // Always merge to get rid of FieldValue.delete if any
      value = mergeValue(record?.value, value, allowDotsInKeys: true);
      //}
    } else {
      // Simple clone the calue
      value = cloneValue(value);
    }

/// Merge an existing value with a new value, Map only!
dynamic mergeValue(dynamic existingValue, dynamic newValue,

因此,合并仅适用于地图,如果按您说的那样起作用,否则将创建对象的副本,因此其中不存在的字段将消失。

相关问题