Utilisation de LiteDB dans PowerShell 7 –
LiteDB est une base de données intégrée NoSQL native .NET. .NET intégré, LiteDB est facilement accessible à PowerShell et fonctionne à merveille en tant que base de données locale et flexible. Cryptage intégré, commandes de type SQL et compatible ACID avec prise en charge complète des transactions LiteDB est simple et facile à utiliser. Dans cet article, nous parlerons de la possibilité d’utiliser LiteDB dans PowerShell et des cas d’utilisation potentiels!
Sommaire
Installation de LiteDB dans PowerShell
Disponible en tant que package NuGet, LiteDB est facilement installable en tant que package à l’aide de Install-Package
cmdlet. La dernière version, au moment de la publication, est la version 5.0.9
, que nous ciblons comme la version minimale. De plus, pour éviter le besoin de droits administratifs, nous installons ceci sous le CurrentUser
portée.
Install-Package -Name 'LiteDB' -MinimumVersion '5.0.9' -Source 'nuget.org' -Scope 'CurrentUser'
Ensuite, nous allons importer la bibliothèque pour l’utiliser. Vous pouvez simplement utiliser Add-Type
et pointez sur le chemin de l’assemblage, mais nous pouvons automatiser cela.
# Test if we have already loaded the assembly by looking for the PSType of LiteDB.LiteDatabase
If ( -Not ([System.Management.Automation.PSTypeName]'LiteDB.LiteDatabase').Type ) {
# 1) Get the path of the LiteDB package using the Source
# 2) This returns the *.nupkg file, so we use Split-Path to only return the package root path
# 3) Multiple DLL's will exist, usually for .NET 4.5, .NET Standard 1.3, and .NET Standard 2.0. Locate only the .NET Standard and the latest version, in this case 2.0.
# The path will look something like: C:\Users\username\AppData\Local\PackageManagement\NuGet\Packages\LiteDB.5.0.9\lib\netstandard2.0\LiteDB.dll
$standardAssemblyFullPath = (Get-ChildItem -Filter '*.dll' -Recurse (Split-Path (Get-Package -Name 'LiteDB').Source)).FullName | Where-Object {$_ -Like "*standard*"} | Select-Object -Last 1
Add-Type -Path $standardAssemblyFullPath -ErrorAction 'SilentlyContinue'
}
Maintenant que nous avons chargé le module à utiliser, lisez la suite pour créer une nouvelle base de données LiteDB dans la section suivante!
Création d’une nouvelle base de données LiteDB
Il existe un certain nombre de commandes disponibles pour LiteDB, que vous pouvez découvrir ici, mais nous devons d’abord créer une toute nouvelle base de données. Nous devrons définir le chemin où créer le fichier de base de données. Puisque LiteDB crée des bases de données à fichier unique, la base de données peut être située n’importe où. Dans ce cas, nous allons localiser la base de données dans notre chemin actuel et utiliser le nom de Test.db
.
# Create the Test.db database in the current directory
$Database = [LiteDB.LiteDatabase]::New((Join-Path -Path "." -ChildPath "Test.db"))
Gardez à l’esprit que jusqu’à ce que vous appeliez
$Database.Dispose()
sur le fichier de base de données, leTest.db
le fichier restera verrouillé.
Dans la section suivante, nous allons créer une table, ajouter un index et créer un nouvel enregistrement dans notre base de données.
Création d’une table et ajout d’un enregistrement dans LiteDB
Semblable aux tables en SQL, LiteDB utilise des collections, similaires à MongoDB. Pour cet article, nous allons créer une nouvelle collection nommée TestCollection
, et en utilisant GetCollection()
la collection sera créée si elle n’existe pas déjà.
# Retrieve the collection (i.e. table) to store our data in.
$Collection = $Database.GetCollection('TestCollection')
# Make sure that an index exists on the Name field so that queries work easier and quicker.
# To allow for named queries, such as using the Name field, we ensure an index is created.
# The result is sent to Out-Null to avoid the True console output on creation.
$Collection.EnsureIndex('Name') | Out-Null
Les index sont précieux car ils améliorent les performances et permettent des requêtes faciles à nommer lors de la recherche d’un enregistrement. Implémentés à l’aide de skip-lists, les index évitent une analyse complète et une désérialisation de la base de données à chaque fois qu’une recherche est effectuée.
Ajout d’un enregistrement dans une collection LiteDB
Tout d’abord, nous devons configurer le LiteDB.BSONMapper
. Il s’agit de l’implémentation des documents de LiteDB, qui stocke les paires clé-valeur. Nous créons d’abord un mappeur que nous pouvons analyser un objet PowerShell dans un document qui peut ensuite être ajouté à notre collection à l’aide du Insert()
méthode.
$BSONMapper = [LiteDB.BSONMapper]::New()
$Object = @{
"Name" = 'TestName'
"Value" = 'TestValue'
}
Try {
# Attempt to insert the object as a new collection entry.
$Collection.Insert($BSONMapper.ToDocument($Object))
} Catch {
Throw "Unable to insert item."
}
Interroger des enregistrements dans LiteDB
Pour interroger un objet dans LiteDB, nous pouvons utiliser plusieurs méthodes différentes telles que:
FindAll()
– Renvoyer tous les documents d’une collection.FindOne()
– RetourFirstOrDefault
d’unFind()
requete.FindById()
– RetourSingleOrDefault
résultat deFind()
en utilisant la clé primaire de_id
indice.Find()
– Renvoie tous les documents en utilisant l’expression définie.
Dans cet exemple, interrogons tous les documents, puis simplement celui que nous recherchons. Nous pouvons également tester si le document existe, en utilisant le Exists()
méthode. Pour démontrer cela, nous allons d’abord vérifier que le document existe, puis localiser le premier document avec le nom TestName
et enfin localiser tous les documents. Pour illustrer la dernière méthode, nous avons ajouté un document supplémentaire du même nom mais d’une valeur différente.
# Test if the `TestName` document exists
$Collection.Exists("`$.Name="TestName"")
# Return the first `TestName` document found
$Collection.FindOne("`$.Name="TestName"")
# Display all documents in a collection
$Collection.FindAll()
Vérifiez que le document existe, a localisé le document spécifique, puis tous les documents.
Mise à jour et suppression d’un document
Maintenant que nous avons créé un document, mettons à jour la valeur. Ceci est fait en utilisant le bien nommé Update()
méthode.
$Item = $Collection.FindOne("`$.Name="TestName"")
$Item['Value'] = 'UpdatedValue'
Try {
# Attempt to update the existing document with the updated value
$Collection.Update($Item)
} Catch {
Throw "Unable to update item."
}
Bien entendu, nous ne souhaitons peut-être pas conserver ce document. Par conséquent, nous pouvons supprimer le document en utilisant le Remove()
méthode. Cela nous oblige à connaître l’ID du document. Puisque nous avons déjà les informations dans le $Item
variable, nous pouvons tirer parti de la _id
propriété pour supprimer le document.
Try {
# Remove the entry using the _id attribute, internal to the LiteDB database
$Collection.Delete($Item['_id'].RawValue)
} Catch {
Throw "Unable to delete item."
}
Nettoyage de la base de données et étapes suivantes
Étant donné que la base de données est verrouillée lors de son utilisation, nous devons appeler le Dispose()
méthode pour supprimer le verrou. C’est une étape importante, sinon nous risquons de nous retrouver avec la corruption.
$Database.Dispose()
Avec cela, nous avons présenté des exemples de bout en bout de création d’une base de données, de création et de mise à jour de documents et de suppression de ces documents. Il existe de nombreuses utilisations possibles de LiteDB, telles qu’une base de données de collecte de données temporaire sur un serveur, vers un système de stockage de documents rapide et portable qui peut être facilement sauvegardé. Explorez LiteDB et voyez ce que vous pouvez en faire aujourd’hui!