Uso de LiteDB en PowerShell 7 – CloudSavvy IT

Logotipo de Powershell

LiteDB es una base de datos integrada NoSQL nativa de .NET. .NET integrado, LiteDB es fácilmente accesible para PowerShell y funciona maravillosamente como una base de datos local y flexible. Cifrado integrado, comandos similares a SQL y compatible con ACID con soporte completo para transacciones LiteDB es simple y fácil de usar. En este artículo, hablaremos sobre cómo puede usar LiteDB dentro de PowerShell y casos de uso potenciales!

Instalación de LiteDB en PowerShell

Disponible como paquete NuGet, LiteDB se puede instalar fácilmente como paquete utilizando el Install-Package cmdlet. La última versión, en el momento de la publicación, es la versión 5.0.9, a la que apuntamos como la versión mínima. Además, para evitar la necesidad de derechos administrativos, estamos instalando esto bajo la CurrentUser alcance.

Install-Package -Name 'LiteDB' -MinimumVersion '5.0.9' -Source 'nuget.org' -Scope 'CurrentUser'

A continuación, vamos a importar la biblioteca para su uso. Simplemente puede usar Add-Type y señalar la ruta del ensamblaje, pero podemos automatizar eso.

# 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'
}

Ahora que hemos cargado el módulo para su uso, ¡siga leyendo para crear una nueva base de datos LiteDB en la siguiente sección!

Creación de una nueva base de datos LiteDB

Hay varios comandos disponibles para LiteDB, que puede aprender aquí, pero primero debemos crear una nueva base de datos. Necesitaremos definir la ruta donde crear el archivo de base de datos. Dado que LiteDB crea bases de datos de un solo archivo, la base de datos se puede ubicar en cualquier lugar. En este caso, ubicaremos la base de datos en nuestra ruta actual y usaremos el nombre de Test.db.

# Create the Test.db database in the current directory
$Database = [LiteDB.LiteDatabase]::New((Join-Path -Path "." -ChildPath "Test.db"))

Ten en cuenta que hasta que llames $Database.Dispose() en el archivo de la base de datos, Test.db el archivo permanecerá bloqueado.

En la siguiente sección crearemos una tabla, agregaremos un índice y crearemos un nuevo registro en nuestra base de datos.

Crear una tabla y agregar un registro a LiteDB

Similar a las tablas en SQL, LiteDB usa Colecciones, similar a MongoDB. Para este artículo, crearemos una nueva colección llamada TestCollection, y usando GetCollection() la colección se creará si aún no existe.

# 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

Los índices son valiosos ya que aumentan el rendimiento y permiten consultas con nombres fáciles cuando se busca un registro. Implementados usando listas de omisión, los índices evitan un escaneo completo y la deserialización de la base de datos cada vez que se realiza una búsqueda.

Agregar un registro a una colección LiteDB

Primero, necesitamos configurar el LiteDB.BSONMapper. Esta es la implementación de documentos de LiteDB, que almacena pares clave-valor. Primero creamos un asignador que podemos analizar un objeto de PowerShell en un documento que luego se puede agregar a nuestra colección utilizando el Insert() método.

$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."
}

Consultar registros en LiteDB

Para consultar un objeto en LiteDB, podemos usar varios métodos diferentes, como:

  • FindAll() – Devolver todos los documentos de una colección.
  • FindOne() – Devoluciones FirstOrDefault de un Find() consulta.
  • FindById() – Devoluciones SingleOrDefault consecuencia de Find() utilizando la clave principal de _id índice.
  • Find() – Devuelve todos los documentos usando la expresión definida.

En este ejemplo, consultemos todos los documentos y luego solo el que estamos buscando. También podemos probar si el documento existe, usando el Exists() método. Para demostrar esto, primero verificaremos que el documento exista, luego ubicaremos el primer documento con el nombre TestName y finalmente ubique todos los documentos. Para demostrar el último método, hemos agregado un documento adicional con el mismo nombre pero con un valor diferente.

# 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()

Verifique que el documento exista, ubique el documento específico y luego todos los documentos.

Actualizar y eliminar un documento

Ahora que hemos creado un documento, actualice el valor. Esto se hace usando el nombre apropiado Update() método.

$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."
}

Por supuesto, es posible que no queramos conservar este documento. Por lo tanto, podemos eliminar el documento usando el Remove() método. Esto requiere que conozcamos la identificación del documento. Como ya tenemos la información en el $Item variable, podemos aprovechar la _id propiedad para eliminar el documento.

Try {
	# Remove the entry using the _id attribute, internal to the LiteDB database
	$Collection.Delete($Item['_id'].RawValue)
} Catch {
	Throw "Unable to delete item."
}

Limpieza de la base de datos y próximos pasos

Dado que la base de datos está bloqueada cuando está en uso, debemos llamar al Dispose() método para quitar el candado. Este es un paso importante, de lo contrario, podríamos terminar con corrupción.

$Database.Dispose()

Con eso, hemos demostrado ejemplos completos de cómo crear una base de datos, crear y actualizar documentos y eliminar esos documentos. Hay muchos usos posibles para LiteDB, como una base de datos de recopilación de datos temporal en un servidor, hasta un sistema de almacenamiento de documentos rápido y portátil que se puede respaldar fácilmente. ¡Explore LiteDB y vea lo que puede hacer con él hoy!

Deja un comentario

En esta web usamos cookies para personalizar tu experiencia de usuario.    Política de cookies
Privacidad