A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://www.mongodb.com/docs/atlas/device-sdks/sdk/react-native/model-data/data-types/sets/ below:

Sets - React Native SDK - Atlas Device SDKs

New in version realm@10.5.0.

A Realm Set is a special object that allows you to store a collection of unique values. Realm Sets are based on JavaScript sets , but can only contain values of a single type and can only be modified within a write transaction. Sets allow you to perform math operations such as finding the union, intersection, or difference between two Sets. To learn more about performing these operations, see the MDN docs for Implementing basic set operations.

You can define a Realm object model property type as a Realm Set, in a two ways:

1class Character extends Realm.Object {2  static schema = {3    name: 'Character',4    primaryKey: '_id',5    properties: {6      _id: 'objectId',7      name: 'string',8      levelsCompleted: 'int<>',9      inventory: {10        type: 'set',11        objectType: 'string',12      },13    },14  };15}
1class Character extends Realm.Object<Character> {2  _id!: Realm.BSON.ObjectId;3  name!: string;4  levelsCompleted!: Realm.Set<number>;5  inventory!: Realm.Set<string>;67  static schema: ObjectSchema = {8    name: 'Character',9    primaryKey: '_id',10    properties: {11      _id: 'objectId',12      name: 'string',13      levelsCompleted: 'int<>',14      inventory: {15        type: 'set',16        objectType: 'string',17      },18    },19  };20}

To create an object with a Realm Set property, you must create the object within a write transaction. When defining your Realm object, initialize the Realm Set by passing an empty array or an array with your initial values.

In the following example of a CreateInitialCharacters component, we create Character objects with Set properties.

The CreateInitialCharacters component does the following:

1const CreateInitialCharacters = () => {2  const realm = useRealm();3  useEffect(() => {4    realm.write(() => {5      realm.create('Character', {6        _id: new Realm.BSON.ObjectId(),7        name: 'AdventurousPlayer',8        inventory: ['elixir', 'compass', 'glowing shield'],9        levelsCompleted: [4, 9],10      });11    });12    realm.write(() => {13      realm.create('Character', {14        _id: new Realm.BSON.ObjectId(),15        name: 'HealerPlayer',16        inventory: ['estus flask', 'gloves', 'rune'],17        levelsCompleted: [1, 2, 5, 24],18      });19    });20  }, []);21  const characters = useQuery(Character);2223  return (24    <View>25 {characters.map(character => (26 <View key={character._id}>27 <Text>{character.name}</Text>28 </View>29 ))}30 </View>31  );32};
1const CreateInitialCharacters = () => {2  const realm = useRealm();3  useEffect(() => {4    realm.write(() => {5      realm.create('Character', {6        _id: new Realm.BSON.ObjectId(),7        name: 'AdventurousPlayer',8        inventory: ['elixir', 'compass', 'glowing shield'],9        levelsCompleted: [4, 9],10      });11    });1213    realm.write(() => {14      realm.create('Character', {15        _id: new Realm.BSON.ObjectId(),16        name: 'HealerPlayer',17        inventory: ['estus flask', 'gloves', 'rune'],18        levelsCompleted: [1, 2, 5, 24],19      });20    });21  }, []);22  const characters = useQuery(Character);2324  return (25    <View>26 {characters.map(character => (27 <View key={character._id}>28 <Text>{character.name}</Text>29 </View>30 ))}31 </View>32  );33};

To add an item to a Set, pass the new value to the Realm.Set.add() method method within a write transaction.

In the following example of a AddInventoryToCharacter component, we add new Set elements to the character's inventory.

The AddInventoryToCharacter component does the following:

1const AddInventoryToCharacter = ({characterName}) => {2  const realm = useRealm();3  const [inventoryItem, setInventoryItem] = useState('');4  const character = useQuery(5    Character,6    characters => {7      return characters.filtered(`name = '${characterName}'`);8    },9    [characterName],10  )[0];1112  const addInventoryItem = () => {13    realm.write(() => {14      character?.inventory.add(inventoryItem);15    });16  };1718  return (19    <View>20 <TextInput21 onChangeText={text => setInventoryItem(text)}22 value={inventoryItem}23 />24 <Button25 title='Add Inventory Item'26 onPress={addInventoryItem}27 />28 </View>29  );30};
1const AddInventoryToCharacter = ({2 characterName,3}: {4 characterName: string;5}) => {6  const realm = useRealm();7  const [inventoryItem, setInventoryItem] = useState('');8  const character = useQuery(9    Character,10    characters => {11      return characters.filtered(`name = '${characterName}'`);12    },13    [characterName],14  )[0];1516  const addInventoryItem = () => {17    realm.write(() => {18      character?.inventory.add(inventoryItem);19    });20  };2122  return (23    <View>24 <TextInput25 onChangeText={text => setInventoryItem(text)}26 value={inventoryItem}27 />28 <Button29 title='Add Inventory Item'30 onPress={addInventoryItem}31 />32 </View>33  );34};

You may want to check for information about your Set, such as its size or if it contains specific item.

To determine if a Set contains a particular value, pass the value to the Realm.Set.has() method. This method will return true if the Set contains the value specified.

To discover how many items are in a Set, you can check its size property.

In the following example of a QueryCharacterInventory component, we check the character's inventory size and if it has a specific item.

The QueryCharacterInventory component does the following:

1const QueryCharacterInventory = ({characterName}) => {2  const [inventoryItem, setInventoryItem] = useState('');3  const character = useQuery(4    Character,5    characters => {6      return characters.filtered(`name = '${characterName}'`);7    },8    [characterName],9  )[0];1011  const queryCharacterInventory = () => {12    const characterDoesHaveItem = character.inventory.has(inventoryItem);13    if (characterDoesHaveItem) {14      Alert.alert(`Character has item: ${inventoryItem}`);15    } else {16      Alert.alert(`Item not found in character's inventory`);17    }18  };19  return (20    <View>21 <Text>{character.name}</Text>22 <Text>23 Total number of inventory items: {character.inventory.size}24 </Text>25 <TextInput26 onChangeText={text => setInventoryItem(text)}27 value={inventoryItem}28 />29 <Button30 title='Query for Inventory'31 onPress={queryCharacterInventory}32 />33 </View>34  );35};
1const QueryCharacterInventory = ({2 characterName,3}: {4 characterName: string;5}) => {6  const [inventoryItem, setInventoryItem] = useState('');7  const character = useQuery(8    Character,9    characters => {10      return characters.filtered(`name = '${characterName}'`);11    },12    [characterName],13  )[0];1415  const queryCharacterInventory = () => {16    const characterDoesHaveItem: Boolean =17      character.inventory.has(inventoryItem);18    if (characterDoesHaveItem) {19      Alert.alert(`Character has item: ${inventoryItem}`);20    } else {21      Alert.alert(`Item not found in character's inventory`);22    }23  };24  return (25    <View>26 <Text>{character.name}</Text>27 <Text>28 Total number of inventory items: {character.inventory.size}29 </Text>30 <TextInput31 onChangeText={text => setInventoryItem(text)}32 value={inventoryItem}33 />34 <Button35 title='Query for Inventory'36 onPress={queryCharacterInventory}37 />38 </View>39  );40};

You may want to remove a specific item or all items from a Set.

To remove a specific value from a Set, pass the value to the Realm.Set.delete() method within a write transaction.

To clear the Set, run the Realm.Set.clear() method within a write transaction.

In the following example of a RemoveInventoryFromCharacter component, we remove a specific item from the Set and clear the Set of all items.

The RemoveInventoryFromCharacter component does the following:

1const RemoveInventoryFromCharacter = ({characterName}) => {2  const realm = useRealm();3  const [inventoryItem, setInventoryItem] = useState('');4  const character = useQuery(5    Character,6    characters => {7      return characters.filtered(`name = '${characterName}'`);8    },9    [characterName],10  )[0];1112  const removeInventoryItem = () => {13    realm.write(() => {14      character?.inventory.delete(inventoryItem);15    });16  };17  const removeAllInventory = () => {18    realm.write(() => {19      character?.inventory.clear();20    });21  };22  return (23    <View>24 <Text>{character.name}</Text>25 <TextInput26 onChangeText={text => setInventoryItem(text)}27 value={inventoryItem}28 />29 <Button30 title='Remove Inventory Item'31 onPress={removeInventoryItem}32 />33 <Button34 title='Remove All Inventory'35 onPress={removeAllInventory}36 />37 </View>38  );39};
1const RemoveInventoryFromCharacter = ({2 characterName,3}: {4 characterName: string;5}) => {6  const realm = useRealm();7  const [inventoryItem, setInventoryItem] = useState('');8  const character = useQuery(9    Character,10    characters => {11      return characters.filtered(`name = '${characterName}'`);12    },13    [characterName],14  )[0];1516  const removeInventoryItem = () => {17    realm.write(() => {18      character?.inventory.delete(inventoryItem);19    });20  };21  const removeAllInventory = () => {22    realm.write(() => {23      character?.inventory.clear();24    });25  };26  return (27    <View>28 <Text>{character.name}</Text>29 <TextInput30 onChangeText={text => setInventoryItem(text)}31 value={inventoryItem}32 />33 <Button34 title='Remove Inventory Item'35 onPress={removeInventoryItem}36 />37 <Button38 title='Remove All Inventory'39 onPress={removeAllInventory}40 />41 </View>42  );43};

You can traverse a Set to access each item in the Set. To traverse a Set, use the Set.map() method or alternative iteration method.

However, by default the order of the items in a Set is not guaranteed. To traverse a Set in order, you can store the Set's items in a state variable and update that state variable when you add new items to the Set.

In the following example of a TraverseCharacterInventory component, a character starts with no inventory items. When the user adds items to the inventory Set, the component displays each item in the Set in both an ordered and unordered list.

The TraverseCharacterInventory component does the following:

1const TraverseCharacterInventory = ({characterName}) => {2  const realm = useRealm();3  const [inventoryItem, setInventoryItem] = useState('');4  const [inventory, setInventory] = useState([]);56  const character = useQuery(7    Character,8    characters => {9      return characters.filtered(`name = '${characterName}'`);10    },11    [characterName],12  )[0];1314  const addInventoryItem = () => {15    realm.write(() => {16      character?.inventory.add(inventoryItem);17    });18    setInventory([...inventory, inventoryItem]);19  };2021  return (22    <View>23 <Text>{character.name}</Text>24 <Text>Add an item to the inventory:</Text>25 <TextInput26 onChangeText={text => setInventoryItem(text)}27 value={inventoryItem}28 />29 <Button30 title='Add Inventory Item'31 onPress={addInventoryItem}32 />3334 <Text>Ordered Inventory:</Text>35 {inventory.map(item => (36 <Text>{item}</Text>37 ))}3839 <Text>Unordered Inventory:</Text>40 {character.inventory.map(item => (41 <Text>{item}</Text>42 ))}43 </View>44  );45};
1const TraverseCharacterInventory = ({2 characterName,3}: {4 characterName: string;5}) => {6  const realm = useRealm();7  const [inventoryItem, setInventoryItem] = useState<string>('');8  const [inventory, setInventory] = useState<string[]>([]);910  const character = useQuery(11    Character,12    characters => {13      return characters.filtered(`name = '${characterName}'`);14    },15    [characterName],16  )[0];1718  const addInventoryItem = () => {19    realm.write(() => {20      character?.inventory.add(inventoryItem);21    });22    setInventory([...inventory, inventoryItem]);23  };2425  return (26    <View>27 <Text>{character.name}</Text>28 <Text>Add an item to the inventory:</Text>29 <TextInput30 onChangeText={text => setInventoryItem(text)}31 value={inventoryItem}32 />33 <Button34 title='Add Inventory Item'35 onPress={addInventoryItem}36 />3738 <Text>Ordered Inventory:</Text>39 {inventory.map(item => (40 <Text>{item}</Text>41 ))}4243 <Text>Unordered Inventory:</Text>44 {character.inventory.map(item => (45 <Text>{item}</Text>46 ))}47 </View>48  );49};

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4