Often one of the things I hear when people recommend you stuff for windows development is to switch to git-bash
as a default terminal. While I do install git
on my machines, I have always wonder why do you need git-bash
as default at all? you have Powershell
after all!
Powershell
comes with a bunch of common bash aliases like ls
, cd
, cat
, etc, you can find most common aliases with Get-Alias
(or get-alias
), I can see right of the bat wget
, tee
and some others. Plus Powershell Core
is Cross Platform!
Sometimes I need to do some manual backups on mongo databases while I know there are thousands of solutions to this already available but one of the ways to learn is to reinvent the wheel for n-th time so I decided to see if there was some way to talk to mongo from powershell and found this project
nightroman / Mdbc
MongoDB Cmdlets for PowerShell
Mdbc
MongoDB Cmdlets for PowerShell Core 7.4
The PowerShell module based on the official MongoDB C# driver
Quick start
Step 1: Get and install Mdbc from the PSGallery:
Install-Module Mdbc
Step 2: Import the module:
Import-Module Mdbc
Step 3: See help and available commands:
help about_Mdbc help Connect-Mdbc Get-Command -Module Mdbc
Step 4: Make sure mongod is running and try some commands:
# Load the module Import-Module Mdbc # Connect the new collection test.test Connect-Mdbc . test test -NewCollection # Add two documents @{_id = 1; value = 42}, @{_id = 2; value = 3.14} | Add-MdbcData # Get documents as PS objects Get-MdbcData -As PS | Format-Table # Get the document by _id Get-MdbcData @{_id = 1} # Update the document, set 'value' to 100 Update-MdbcData @{_id = 1} @{'
…and Decided to give it a go, so I installed the vscode extension for Powershell plus the module in my local modules
Install-Module Mdbc -Scope CurrentUser
after that just created a test.ps1
file
Import-Module Mdbc; function New-MongoExport { param ( # Your Server's URL [string] $Url = "mongodb://localhost:27017", # Database to connect to [string] $Db = "test", # Collection Name [string] $CollectionName = "users", # Where do we want to put that information [string] $Path = ".\$collectionName.json", # Default Limit [int16] $Limit = 10 ) # Remove the file if it exists Remove-Item $Path -ErrorAction Continue; # Connect and count Connect-Mdbc $Url $Db $CollectionName; $count = Get-MdbcData -Count; # Do some fancy output Write-Host "Exporting $($count) records" -ForegroundColor Yellow -BackgroundColor DarkCyan; for ($i = 0; $i -lt $count; $i += $Limit) { # You don't actually need to paginate # The module uses the mongo driver so it's quite fast # But anyways it reads like `Skip $i items and take the first $Limit items then, export those` Get-MdbcData -Skip $i -First $Limit | Export-MdbcData $Path -Append; } # We're Done, fancy output Write-Host "File Written: $Path" -ForegroundColor Black -BackgroundColor Green; } New-MongoExport # Also you can use it like this # New-MongoExport -Url mongodb://myotherserver:1234 -Db NotTestDB -CollectionName posts
I think the module actually has a way to export collections directly, but like I said above I just wanted to toy out with this.
I don't know, but this appealed to me makes me wonder what I could do with it, besides automation, you know this language is supposed to be used to automate stuff also anyways
Have you done something in Powershell
? share it in the comments!
Also if you don't like Powershell
could you share why?
I mean I guess there's a reason why WSL is a thing nowdays.
Top comments (2)
Hi Angel, I am glad you found Mdbc useful. You might be interested in my recent similar project for LiteDB, Ldbc -- github.com/nightroman/Ldbc
By the way, I got familiar with LiteDB from your AvaFunc project!
Ahh the small world we live in!
I need to update or clean up that project it's just a quick and dirty thing
this could be really neat for offline scripts!
I will take a look indeed 😋