SEMBAST - Как удалить конкретный массив из моей БД? - PullRequest
0 голосов
/ 06 июня 2019

Это пример структуры БД, хранящейся на моем устройстве с использованием SEMBAST.

{
  "household": [
    {
      "id": "1",
      "group": {
        "group_id": "1",
        "group_name": "UP"
      },
      "states": {
        "state_id": "1",
        "state_name": "UP"
      },
      "cluster": {
        "cluster_id": "1",
        "cluster_name": "Saharanpur"
      },
      "hid": "A02",
      "total_family_members": "5",
      "famil_income": "3400000",
      "bpl": {
        "bpl_id": "1",
        "bpl_name": "Yes"
      },
      "duration": "90",
      "religion": {
        "religion_id": "1",
        "religion_name": "Hindu"
      },
      "residence": {
        "residence_id": "1",
        "residence_type": "Rented"
      },
      "individual_details": [
        {
          "id": "0001",
          "pid": "ASDASD3453456",
          "enu_date": "11-5-2019",
          "personal_details": {
            "name": "Redox",
            "dob": "11-5-1987",
            "age": "32"
          },
          "sex": {
            "sex_id": "1",
            "sex_type": "Female"
          },
          "relationship": {
            "relationship_id": "1",
            "relationship_type": "self"
          },
          "marital": {
            "maritial_id": "1",
            "maritial_type": "Married"
          },
          "occupation": {
            "occupation_id": "1",
            "occupation_type": "Professional"
          },
          "income": "20000",
          "enroll": {
            "enroll_id": "1",
            "enroll_type": "Eligible",
            "specific_reason": "No",
            "other_reason": ""
          }
        },
        {
          "id": "0002",
          "pid": "ASDASD3453456",
          "enu_date": "11-5-2019",
          "personal_details": {
            "name": "Redox",
            "dob": "11-5-1987",
            "age": "32"
          },
          "sex": {
            "sex_id": "1",
            "sex_type": "Female"
          },
          "relationship": {
            "relationship_id": "1",
            "relationship_type": "self"
          },
          "marital": {
            "maritial_id": "1",
            "maritial_type": "Married"
          },
          "occupation": {
            "occupation_id": "1",
            "occupation_type": "Professional"
          },
          "income": "20000",
          "enroll": {
            "enroll_id": "1",
            "enroll_type": "Eligible",
            "specific_reason": "No",
            "other_reason": ""
          }
        }
      ]
    }
  ]
}

Из приведенных выше данных я хочу удалить только приведенный ниже массив, который является первым значением массива под ключом "индивидуальные_детали".

{
                "id":"0001",
                "pid":"ASDASD3453456",
                "enu_date":"11-5-2019",
                "personal_details":{
                "name":"Redox",
                "dob":"11-5-1987",
                "age":"32"
                },
                "sex":{
                  "sex_id":"1",
                  "sex_type":"Female"
                },
                "relationship":{
                  "relationship_id":"1",
                  "relationship_type":"self"
                },
                "marital":{
                  "maritial_id":"1",
                  "maritial_type":"Married"
                },
                "occupation":{
                  "occupation_id":"1",
                  "occupation_type":"Professional"
                },
                "income":"20000",
                "enroll":{
                  "enroll_id":"1",
                  "enroll_type":"Eligible",
                  "specific_reason":"No",
                  "other_reason":""
                }

              },

Мой код в Flutter ниже

Future deleteHousehold(Household houseHold,int index) async {
    final finder = Finder(filter: Filter.byKey(houseHold.individualDetails[index].id));
    await _householdStore.delete(await _db, finder: finder);
  }

Я тоже пытался

final finder = Finder(filter: Filter.equal("pid",houseHold.individualDetails[index].id));
    await _householdStore.delete(await _db, finder: finder);

final finder = Finder(filter: Filter.equals("id", houseHold.individualDetails[index].id));

Но я не могу удалить эту конкретную строку. Помощь высоко ценится.

1 Ответ

0 голосов
/ 07 июня 2019

Sembast - это база данных на основе документов. Вы можете обновить одно поле в документе. Поэтому, если вы хотите обновить элемент в массиве, вы должны обновить весь массив (но вы можете обновить только этот массив, как в Firestore)

Я не уверен, что запись в вашем примере (это «домашнее хозяйство» список записей или поле в вашем документе), но вы можете легко обновить / удалить запись по ключу. Я упростил ваш набор данных в псевдо-примере ниже.

var store = intMapStoreFactory.store('household');

// Add a document
var key = await store.add(db, {
  "residence": {"residence_id": "1", "residence_type": "Rented"},
  "individual_details": [
    {"id": "0001", "pid": "ASDASD3453456"}
  ]
});

// Get its reference
var record = store.record(key);

// Update a single field
await record.put(db, {'individual_details': [{"id": "0002", "pid": "ASDASD3453456"}]}, merge: true);

expect(await record.get(db), {
  'residence': {'residence_id': '1', 'residence_type': 'Rented'},
  'individual_details': [{'id': '0002', 'pid': 'ASDASD3453456'}]
});

// Delete the record
await record.delete(db);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...